黑马程序员技术交流社区

标题: 注解annotation小结 [打印本页]

作者: wumuzhong    时间: 2013-10-1 18:17
标题: 注解annotation小结
@suppressWarnings的应用
-》通过System.runFinalizersOnExit(true)的编译警告引出
-》SuppressWarnings("deprecation");
@Deprecated
-》直接在刚才的类中增加一个方法,并加上@Deprecated标注,在另外一个类中调用这个方法
@Override
-》public boolean equals(Reflect other)方法与HashSet结合讲解
注解相当与于一种标记,加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后javac编译器,开发工具和其他程序可以用反射来了解你的类及
各种元素上有无何种标记,看有什么标记,就去干相应的事,标记可以加在包,类,字段,方法,方法的参数以及局部变量上
注解的应用结构图
注解类 -》@interface A{}
应用了“注解类”类 -》@A Class B{}
对”应用了注解类的类“进行反射操作的类
-》Class C{
  B.class.isAnnotationPresent(A.class);
  A a = B.class.getAnnotion(A.class);
    }
注解就相当于一个源程序中要调用的一个类,要在源程序中应用某个注解,得先准备好了这个注解类,就像要调用某个类,得先有开发好这个类。

  
自定义注解及其应用
-》定义一个最简单的注解:public @interface MyAnnotation{}
-》把它加载某个类上:@MyAnnotation public class AnnotationTest{}
-》用反射进行测试AnnotationTest的定义是否有@MyAnnotation
-》根据发射测试的问题,引出@Retention元注解的讲解,其三种取值:
RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME;分别对应:java源文件->class文件->内存中的字节码

演示和讲解@Target元注解
-》Target的默认值为任何元素,设置Target等于ElemnentType.METHOD,原来加在类上的注解就报错了,改为用数组方式设置
{ElementType.METHOD,ElementType.TYPE}就可以了
元注解以及器枚举属性值不用记,只要看jdk提供那几个基本注解的api就行了
为注解增加基本属性
什么是注解的属性
-》一个注解相当于一个某个学校的胸牌,如果贴了胸牌就是这个学校的学生,如果还想区分是那一班的,就可以在胸牌上增加一个属性来进行区分,加了
属性的标记效果为:@MyAnnotation(color\”red")
定义基本类型的属性和应用属性
-》在注解中增加String color();
-》@MyAnnotation(color="red")
用反射方式获得注解对应的实例对象后,在通过该对象调用属性对应的方法
-》MyAnnotation a = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
  -》System.out.pritnln(a.color);
-》可以认为上面这个@MyAnnotation是MyAnnotation类的一个实例对象
为属性指定缺省值
-》String color() default "yellow";
value属性
-》String value() default "zxx"
-》如果注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默认值或者
为注解增加高级属性
数组类型的属性
-》int[] arrayAttr() default{1,2,3};
-》@MyAnnotation(arrayAttr={2,3,4})
-》如果数组属性中只有一个元素,这时候属性值部分可以省略大括号
枚举类型的属性
-》EnumTest.TrafficLamp lamp();
-》@MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
注解类型的属性
-》MetaAnnotation annotationAttr() default @MetaAnnotation("xxx");
-》MyAnnotation(annotationAttr()=@MetaAnnotation("yyy");
-》可以认为上面这个@MyAnnotation是MyAnnotation类的一个实例对象,同样的道理,可以认为上面这个@MetaAnnotation是MetaAnnotation类的一个实例
对象,调用代码如下:
MetaAnnotation ma = MyAnnotation.annotationAttr();
System.out.println(ma.value());
注解的详细语法可通过javac语言规范了解,即java的language specification


作者: wumuzhong    时间: 2013-10-1 18:18
坐个沙发




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2