注解
Java API中的三种注解:
1.@SupperssWarnings
@SupperssWarnings("deprecation")//告诉编译工具已知此方法过时,不需再提
示了。
2.@Deprecated
在定义一个方法时,前面加上@Deprecated//说时这个方法已过时,让只前用到
这个方法的程序继续运行,但告知新的用户使用时注意,尽量不要使用。
3。@Override
在定义一个方法时,前面加上@Override//告诉编译器,此方法如果是覆盖父类
的方法,如参数不正确,则提示错误。
总结:
注解相当于一种标记,加了注解就等于打上了某种标记,没加,则等于没有某
种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各
种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包、类
、字段、方法、方法的参数以及局部变量上。
注解就相当于一个你的源程序中要调用的一个类,要在源程序中应用某个注解,得
先准备好了这个注解类。就像你要调用某个类,得先有开发好的这个类。
注解的注解称为元注解:
@Retention元注解,有三种取值:RetentionPolicy.SOURCE、
RetentionPolicy.CLASS、RetentionPolicy.RUNTIME;分别对应:java源文件-
>class文件->内存中的字节码。
@Target元注解,默认值为任何元素,设置Target等于ElementType.METHOD.
*什么是注解的属性
一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是传智播客的学生,否则
,就不是。如果还想区分是哪个班的学生,这时候可以为胸牌再增加一个属性来进
行区分。加了属性的标记效果为:@MyAnnotation(color="red")
*定义基本类型的属性和应用属性
在注解类中增加String color();
@MyAnnotation(color="red")//设置注解的属性值
*用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法
MyAnnotation a=(MyAnnotation)Annotation.class.getAnnotation
(MyAnnotation.class);
System.out.println(a.color());//得到属性值时,调用的是方法
可以认为@MyAnnotation是MyAnnotation类的一个实例对象。
*为属性指定缺省值
String color() default "yellow";
*value属性
String value() default "zxx";
如果注解中有一个名称为value的属性,且你只想设置value属性(即其他属性
都采用默认值或者你只有一个value属性),那么可以省略value=部分,例如:
@MyAnnotation("lhm")。
为注解增加高级属性
*数组类型的属性
int[] arrayAttr() default{1,2,3};
@MyAnnotation(arrayAttr={2,3,4})
如果数组属性只有一个元素,这时候属性值部分可以省略大括号。
*枚举类型的属性
EnumTest.TrafficLamp Lamp();
@MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
*注解类型的属性:
MetaAnnotation annotationAttr() default @MetaAnnotation("xxxx");
@MyAnnotation(annotationAttr=@MetaAnnotation("YYY")
可以认为上面这个@MyAnnotation是MyAnnotation类的一个实例对象,同样的
道理,可以认为上面这个@MetaAnnotation是MetaAnnotation类的一个实例对象,
调用代码如下:
MetaAnnotation ma=MyAnnotation.annotationAttr();
System.out.println(ma.value());
枚举和注解都是特殊的类,不能用new创建它们的实例对象,创建枚举的实例对象
就是在其中增加元素。在程序中如何创建出一个注解的实例对象呢?那就是直接用
@放上一个标记即可。