-------android培训、java培训、期待与您交流! ----------
了解注解及java提供的几个基本注解
·@UpperessWarning 编译警告
·@Override 继承
·@Deprecated过时编译
总结:
注解相当于一种标记,加了注解就等于打上了某种标记,开发工具和其他程序可以用反射了解你的类
及各种元素上有无 标记,看你有什么标记就去干相应的使。标记可以加在包,类,字段,方法,方法的
参数以及局部变量上。
自定义注解及其应用
·定义一个简单的注解:pulbic @interface MyAnnocation{}
·把它加在某个类上:@MyAnnocation public class AnnocationTest{}
·用反射进行测试AnnocationTest的定义上是否有@MyAnnocation
·根据发射测试问题,引出@Retention元注解的讲解,其三种取值:RetentionPolicy.SOUPCE.RetentionPolicy.CLASS.
RetentionPolicy.RUNTIME:分别对应:java源文件-->class文件-->内存中的字节码
演示和讲解@Target元注解
Target的默认值为任何元素,设置Target等于ElementType.METHOD,原来加在类上的注解就报错了。
改为数组方式设置{ElementType.METHOD.ElementType.Type}就可以了。
为注解添加属性:
什么是注解的属性
一个注解相当于一个胸牌,如果你胸前贴了胸牌,你就是传智播客的学生,否则,就不是。如果还想区分是传智播客哪个班的学生,这时候就可以为胸牌添加一个属性来进行区分。为了属性的标记效果为:@MyAnnocation(color=red);
·定义基本类型的属性和应用属性:
在注解中添加String color();
@MyAnnocation(color=red);
·用反射方式获得注解对应的实例对象后,在通过该对象调用属性对应的方法。
为属性制定缺醒值:
String color() default "yellow";
value属性:
String value() default "xxx"
如果注解中一个名为value的属性,且你只想设置value属性
为注解添加高级属性
·数组类型的属性
int [] arrayAttr() default{1,2,3}
@MyAnnocation(arrayAttr={2,3,4})
如果数组属性只有一个元素,这时候属性值可以省略大廓
·枚举类型的属性
EnumTest TrafficLamp lamp();
@MyAnnocation(lamp=EnumTest.TrfficLamp GREEN)
注解的类型属性:
---------------------------------------------------------------------------------------------------------------------------------
package anucation;
public @interface MetaAnnocation {
String value();
}
--------------------------------------------------------------------------------------
//原注解 元数据 元信息
@Retention(RetentionPolicy.RUNTIME) //保留到运行期间
@Target({ElementType.METHOD,ElementType.TYPE})
//ElementType.METHOD注释只能放在方法上,METHOD,ElementType.TYPE}表示也可放在类上
public @interface ItcastAnnocation {
String color() default "blue"; //缺省属性
String value();
int [] arr()default{1,2,3}; //数组类型的属性
// EnumTest TrafficLamp lamp() default EnumTest.TrafficLamp.RED; //·枚举类型的属性
MetaAnnocation annocationAttr() default@MetaAnnocation("AAA"); //注解的类型属性
}
--------------------------------------------------------------------------------------
@ItcastAnnocation(annocationAttr=@MetaAnnocation("aa"),value="abc") //注解中标记了缺省值 就不必声明了
public class Annocation {
public static void main(String [] args){
if(Annocation.class.isAnnotationPresent(ItcastAnnocation.class)){
ItcastAnnocation annocation=Annocation.class.getAnnotation(ItcastAnnocation.class);
System.out.println(annocation.color());
System.out.println(annocation.value());
// System.out.println(annocation.lamp().nextLamp.name());//GREEN
System.out.println(annocation.annocationAttr());
}
}
}
--------------------------------------------------------------------------
打印结果
blue
abc
GREEN
@anucation.MetaAnnocation(value=aa)
--------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
------- android培训、java培训、期待与您交流! ----------
详细请查看:http://edu.csdn.net/heima/