注解网络原语:
1、注解相当于一种标记,可以通过反射获得,可以给包,类,方法,变量等加注解,jdk中提供的最基本的注解 是 Annotation
2、Deprecated 用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。
3、Override 表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,
则编译器会生成一条错误消息。
4、SuppressWarnings指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。
注解的定义与反射调用
注解定义:
package annotation;
public @interface MetaAnnotation {
String value();
}
枚举:
package annotation;
public class EnumTest {
public enum TrafficLamp {RED,YELLOW,GREEN};
}
自定义注解:
package annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) //保留到运行时,可通过反射获取
@Target(value={ElementType.TYPE,ElementType.METHOD}) //注解有效dest
public @interface CustomedAnnotation {
//为注解增加各种属性
int[] arrayAttr() default{3,2,4}; //数组类型的属性
EnumTest.TrafficLamp lamp(); //枚举类型
MetaAnnotation annotationArrt() default @MetaAnnotation("xxx"); // 注解类型的属性
}
测试注解:
package annotation;
import java.util.Arrays;
@CustomedAnnotation(lamp=EnumTest.TrafficLamp.GREEN,annotationArrt=@MetaAnnotation("xxx"),arrayAttr=1)
public class AnnotationTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if(AnnotationTest.class.isAnnotationPresent(CustomedAnnotation.class)) { //判断是否存在 ca字节码
CustomedAnnotation cusAnn =
AnnotationTest.class.getAnnotation(CustomedAnnotation.class); //获得注解对象 反射
System.out.println(cusAnn);
System.out.println(cusAnn.arrayAttr().getClass().getName());
System.out.println(Arrays.asList(cusAnn.arrayAttr()));
System.out.println(cusAnn.lamp());
System.out.println(cusAnn.annotationArrt().annotationType());
}
}
}