7,注解。 1.5以后的新特性。 Annotation Typese 注解类 在java.lang包中, @ Deprecated 给方法注释为“过时” @ Override 给方法注释为“覆写”,系统自动判断方法是否为覆写。 @ SuppressWarnings eg:@SuppressWarnings(“deprecation”)//编译器不再提示过时。 >> 注解:相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事,标记可以加在包,类,字段,方法,方法的参数以及局部变量上。 >> @Retention元注解:其三种取值:RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME > 文件编译运行的三个阶段:Javac把源文件翻译成class文件,类加载器把class文件调到内存中来。 @Retention 元注解的默认值是在class阶段。 @Overridesource阶段, @SuppressWarningssource阶段, @Deprecated runtime阶段。 元注解:注解的注解。元数据、元信息。 >> @Target元注解,指示定义在什么上的注解,方法?类?成员等。 @Retention和@Target不用特意去记,api中输入@Override,开头就有这两个。 为注解类增加基本属性,应用。 //注解类的写法: @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) public @interface ItcastAnnotation { String color() default "blue";//字符串,并设置缺省字符。 String value(); int[] arrayAttr()default {3,4,4};//数组 EnumTest.TrafficLamplamp() default EnumTest.TrafficLamp.RED;//枚举 MetaAnnotationannotationAttr() default @MetaAnnotation("lhm");//另写的一个注解类,只有一个值。 } //在类中调用注解类: @ItcastAnnotation(annotationAttr=@MetaAnnotation("flx"),color="red",value="abc",arrayAttr=1) public class AnnotationTest { @SuppressWarnings("deprecation") @ItcastAnnotation("xyz") public static void main(String[]args) throws Exception{ if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){//判断是不是注解。 ItcastAnnotation annotation= //用反射获取该类的注解类。 (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class); System.out.println(annotation.color()); System.out.println(annotation.value()); System.out.println(annotation.arrayAttr().length); System.out.println(annotation.lamp().nextLamp().name()); System.out.println(annotation.annotationAttr().value()); } } @Deprecated //设置为过时。 public static void sayHello(){ System.out.println("hi,传智播客"); } } Method mainMethod =AnnotationTest.class.getMethod("main", String[].class); ItcastAnnotation annotation2 = (ItcastAnnotation)mainMethod.getAnnotation(ItcastAnnotation.class); System.out.println(annotation2.value()); |