首页 > 代码库 > JDK5-注解
JDK5-注解
注解是一个类,一个声明就是一个对象
1. 简单注解
@SuppressWarnings("msg")
@Deprecated - 声明过时
@Override - 声明复写
2. 自定义注解
1 public @interface Anno { 2 }
3. 注解的使用
1 @Anno 2 public class AnnoTest { 3 public static void main(String[] args) { 4 if(AnnoTest.class.isAnnotationPresent(Anno.class)) { 5 Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class); 6 ... 7 } 8 } 9 }
但是在这里我们发现:无法获取到Anno的实例,是因为Anno注解在加载进内存时去除了
以此引出注解的生命周期:
源文件:RetentionPolicy.SOURCE(如SuppressWarnings及Override)
class文件:RetentionPolicy.CLASS(默认)
内存字节码:RetentionPolicy.RUNTIME(如Deprecated)
4. 重定义注解
1 @Retention(RetentionPolicy.RUNTIME) 2 public @interface Anno { 3 }
元注解:对注解进行注解的注解(@Retention与@Target)-> java.lang.annotation
5. 注解的作用范围
Target元注解:@Target(ElementType[])
如:@Target({ElementType.TYPE, ElementType.METHOD})
@Target(ElementType.TYPE) // 一个元素可以省略{}
ElementType.
TYPE:类、接口、枚举...
PARAMETER:参数
PACKAGE:包
METHOD:方法
LOCAL_VARIABLE:局部变量
FIELD:属性
CONSTRUCTOR:构造器
ANNOTATION_TYPE:注解
6. 为注解加属性(方法)
注解中属性的类型:八种基本类型、String、Class(ClassName.class)、enum以及上述类型的数组
1 @Retention(RetentionPolicy.RUNTIME) 2 public @interface Anno { 3 String color(); 4 } 5 6 @Anno(color="red") 7 public class AnnoTest { 8 public static void main(String[] args) { 9 if(AnnoTest.class.isAnnotationPresent(Anno.class)) { 10 Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class); 11 System.out.println(anno.color()); 12 } 13 } 14 }
7. 为注解属性添加默认值
若注解内只有一个属性且名为value或除value外其他属性均有默认值时,赋值时可以省略value,如下:
1 @Retention(RetentionPolicy.RUNTIME) 2 public @interface Anno { 3 String value(); 4 } 5 6 @Retention(RetentionPolicy.RUNTIME) 7 public @interface Anno2 { 8 String color() default "red";// 为属性设置默认值 9 String value(); 10 int[] array() default {1, 2, 3}; 11 Anno annotation() default @Anno("Joshua"); // 注解中属性为注解 12 } 13 14 @Anno("Joshua") 15 @Anno2("Joshua_AW") 16 public class AnnoTest { 17 public static void main(String[] args) { 18 if(AnnoTest.class.isAnnotationPresent(Anno.class)) { 19 Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class); 20 System.out.println(anno.value()); 21 } 22 } 23 }
Anno2也可也这样引用:@Anno2(color="blue", value="http://www.mamicode.com/Joshua", array=1)
JDK5-注解