黑马Java学习笔记之-----注解Annotation
---------------------- android培训、java培训、期待与您交流! ----------------------
注解:
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
常见的annotation注解:
- @Override: 用在方法,说明这个方法打算重写父类中的另一个方法的声明。
- @Deprecated: 用于所有元素,说明该方法或属性等已经过时,不建议使用,编译器会产生警告信息,通常是因为它很危险或存在更好的选择。
- @SuppressWarnings: 取消显示指定的编译器警告。
元注解:
- @Retention: 表示注释类型的注释要保留多久。其中的RetentionPolicy共有三种策略,分别是:
- @SOURCE: 这个Annotation类型的信息只会保存在程序源码中,源码如果经过了编译之后,Annotation的数据就会消失,并不会保存在编译好的.class二进制文件中。
- @CLASS: 这个Annotation类型的信息保留在程序源码中,同时也会保存在编译好的.class文件中,在执行的时候并不会加载到JVM中。(默认)
- @RUNTIME: 表示在源码、编译好的.class文件中保存信息,在执行的时候会把这些信息加载到JVM中,这样可以使用反射将其信息获取出来。
- @Target: 表示注释类型所使用的程序元素的种类。不声明则可以用在任一程序元素中。其中ElementType程序元素类型提供了Java程序中声明的元素的简单分类:
- ANNOTATION_TYPE: 注释类型
- CONSTRUCTOR: 构造方法
- FIELD: 字段(包括枚举常量)
- LOCAL_VARIABLE: 局部变量
- METHOD: 方法
- PACKAGE: 包
- PARAMETER: 参数
- TYPE: 类Class、接口Interface(包括注释类型Annotation)或枚举Enum
- @Documented: 表示某一类型的注释将通过javadoc和类似的默认工具进行文档化,文档化时其注释部分将成为注释元素的公共API的一部分。
- @Inheried: 允许子类继承父类中的注解
自定义注解:
1 import java.lang.annotation.ElementType; 2 import java.lang.annotation.Retention; 3 import java.lang.annotation.RetentionPolicy; 4 import java.lang.annotation.Target; 5 6 /* 7 * 定义一个注解 8 */ 9 10 @Retention(RetentionPolicy.RUNTIME) 11 @Target({ElementType.METHOD, ElementType.TYPE}) 12 public @interface MyAnnotation { 13 //为注解添加属性 14 String color(); 15 String value() default "Hello Java"; //为属性提供默认值 16 int[] array() default {1, 2, 3}; 17 Gender gender() default Gender.MAN; //添加一个枚举 18 MetaAnnotation metaAnnotation() default @MetaAnnotation(birthday="1999-2-18"); 19 //添加枚举属性 20 21 }
总结
注解可以看成是一个接口,注解实例就是一个实现了该接口的动态代理类。
注解大多是用做对某个类 、 方法 、 字段进行说明 , 标识的 。 以便在程序运行期间我们通
过反射获得该字段或方法的注解的实例,来决定该做些什么处理或不该进行什么处理 。
---------------------- android培训、java培训、期待与您交流! ----------------------