注解定义、基本语法和属性
一、概念
注解(Annotation)是给程序(例如javac,框架等)提供某些的信息,而注释(Comment)是给程序员提供信息。
二、定义基本语法
- 定义
public @interface Anno01 { public static final double PI=3.14; //语法是方法,但是使用上叫属性----注解的属性 public String name(); }
- 使用
public @interface Anno01 { public static final double PI=3.14; //语法是方法,但是使用上叫属性----注解的属性 public String name(); }
三、属性
- 属性的返回值类型
@Retention(RetentionPolicy.RUNTIME) public @interface Anno01 { public void test(); //属性的返回值不能是任意类型,void会报错 }
- 属性可以有默认值
- 定义
ublic @interface Anno03 { public String attr1();//木有默认值 public String attr2() default "dasb";//有默认值 public String[] attr3();//默认默认值 public String[] attr4() default {"sb1","sb2"};//有 }
2. 使用
@Anno03(attr1= {"jhjh"},attr3= "gssf") //没有默认值必须要为其赋值,有默认值可以重新为其赋值 public class test01 { public static void main(String[] args) { } }
- 一维数组属性
1. 定义
public @interface Anno04 { public String[] attr(); }
2. 赋值
@Anno04(attr="sb1") //如果值得数组就有一个元素,可以省略大括号,加上也可以 public class Test05 { }
@Anno04(attr={"sb1","sb2"}) //多个值必须用大括号括起来,数组若没有值用空大括号。
public class Test07 {
}
- 特殊属性名 value
1. 定义
public @interface Anno05 { public String value(); public String attr() default ""; }
2. 赋值
@Anno05("zhangsan") //如果给value属性赋值可以省略value=,如果给多个属性赋值则不能省略 public class Test11 { }