黑马程序员--注解

来源:互联网 发布:ehviewer 网络错误 编辑:程序博客网 时间:2024/06/01 10:15

------- android培训java培训、期待与您交流! ----------

Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译
时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完
整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这
些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它
也能在class文件中出现。

@Override 表示当前方法是覆盖父类的方法。


@Deprecated 表示当前元素是不赞成使用的。


@SuppressWarnings 表示关闭一些不当的编译器警告信息。


元注解


@Target,@Retention,@Documented,@Inherited

@Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:


ElemenetType.CONSTRUCTOR 构造器声明
ElemenetType.FIELD 域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE 局部变量声明
ElemenetType.METHOD 方法声明2013/5/12
ElemenetType.PACKAGE 包声明
ElemenetType.PARAMETER 参数声明
ElemenetType.TYPE 类,接口(包括注解类型)或enum声明

@Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:


RetentionPolicy.SOURCE
注解将被编译器丢弃
RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。

@Documented 将此注解包含在 javadoc 中

@Inherited 允许子类继承父类中的注解

注解的应用结构图


 

为注解增加基本属性

(可以是八种基本数据类型,String,数组,枚举,注解,Class

什么是注解的属性?

一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是传智播客的学生,否则,就不是。如果还想区分出是传智播客哪个班的学生,这时候可以为胸牌在增加一个属性来进行区分。加了属性的标记效果为:@MyAnnotation(color="red")

定义基本类型的属性和应用属性:

在注解类中增加String color();

@MyAnnotation(color="red")

用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法

MyAnnotation a = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);

System.out.println(a.color());

可以认为上面这个@MyAnnotationMyAnnotaion类的一个实例对象

如果注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默认值或者你只有一个value属性),那么可以省略value=部分,例如:@MyAnnotation("lhm")

枚举和注解都是特殊的类,不能用new创建它们的实例对象,创建枚举的实例对象就是在其中增加元素。

在程序中如何创建出一个注解的实例对象啊?直接用@放上一个标记即可

 

总结:
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以
后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有
什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。