一》一个注解就是一个类,用某个注解就是创建了某个注解的对象
二》作用就是传递信息给编译器或者开发工具,告诉它应该怎么做。
三》常用注解:
@Override:判断方法有没有覆盖;
@Deprecated 让某个方法过时;
@SuppressWarnings("deprecation"):某个方法过时,但还继续想用。
一》保留在那个生命周期
@Retention(RetentionPolicy.SOURCE)在源文件阶段,class阶段没有,运行没有
@Retention(RetentionPolicy.class):在class阶段,运行时没有;(默认阶段)
@Retention(RetentionPolicy.RUNTIME):保留注解类在运行阶段,
二》作用在那个成分上
//说明这个注解类只能作用在方法上;
@Target(ElementType.METHOD)
//既能作用在方法上和也能作用类上,用的是数组形式
@Target({ElementType.METHOD,ElementType.TYPE})
作用在字段上
@Target(ElementType.FIELD)
作用在形式参数上
@Target(ElementType.PARAMETER)
一》注解类很想接口
public @interface ItcastAnnotation {
//定义注解类属性
}
二》注解属性很像方法
//注解类
public @interface ItcastAnnotation {
//定义注解类属性,跟接口一样,前面省略public abstract
String color();
String value();
}
说明这个注解类有一个color属性和Value属性;
三》应用带属性的注解类,必须设置属性(以属性的方式设置);
//应用注解的类
@ItcastAnnotation(color="red",value="abc")
四》给注解类的属性设置默认值
public @interface ItcastAnnotation {
//定义注解类属性,跟接口一样,前面省略public abstract
String color() default "blue";
String value();
}
就是说color已经有默认值,可以重新设置,也可以不设置,就相当于该注解类只有一个属性需要设置就是value,所以设置value时,可以省略value名和“=”;
@ItcastAnnotation("abc")
五》如果注解类中只有一个属性需要设置值,可以省略属性名和“=”
@SuppressWarnings("deprecation")
六》在应用注解类的类中获取注解类对象
ItcastAnnotation annotation =
(ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
七》调用注解类属性时,是以方法的形式调用;
//如果应用了某个注解类,就得到这个注解类对象
//获取注解类对象
ItcastAnnotation annotation =
(ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation.color());
1.int【】数组
//int[]数组
int[] arr();
在应用类中设置int数组属性
@ItcastAnnotation(arr={1,2,3})
2.枚举属性
TrafficLamp lamp() default TrafficLamp.GREEN;
在应用类中设置属性
@ItcastAnnotation(clamp=TrafficLamp.RED)
3.注解类型的属性并缺省值
MetaAnnotationmetaAnnotation()default@MetaAnnotation(value="annotationA");
在应用类中设置属性
@ItcastAnnotation( metaAnnotation=@MetaAnnotation(value="annotationB"))