注解(三)

来源:互联网 发布:剑三五毒萝莉捏脸数据 编辑:程序博客网 时间:2024/06/05 05:26

 

 

1.什么是注解以及它的作用?

 注解就是写在代码里的一种配置文件;

 小插曲:JDK1.5的新特性:枚举,注解,增强for循环......

 

2.JDK提供的常用注解:

1@Override:标志此方法是覆写父类的方法,如果没有覆写则报错

   小插曲:在覆写Objectequals方法的时候,如果没有正确的覆写,那么在HashSet方法调用equals的方法的时候,继续调用父类的equals方法,而把我们自己的方法当做equals的重载形式;

(2)@Deprecated:提醒过时

(3)@SuppressWarnings:压缩警告

例:@SuppressWarnings("deprecation")提醒编译器或开发工具不要出现警告“方法或者类过时了 ”的信息

 

3.注解可以加的地方:

包,类,字段,方法,方法的参数以及局部变量上

 

4.自定义注解:

 (1)定义注解的关键字:@interface  

 (2)元注解@Retention:指定定义的注解的生命周期

      其三种取值:RetetionPolicy.SOURCERetetionPolicy.CLASS(默认)、RetetionPolicy.RUNTIME;         分别对应:java源文件-->class文件-->内存中的字节码。

  (3)元注解@Target:指定注解的使用范围:Target的默认值为任何元素

 (4)注解的属性:

定义格式:返回值类型 名称();

特殊属性名称:Value:如果只有value的值需要设置时,那么可以省略value=

默认值:使用default定义;

可以定义的类型:

八大基本数据类型、枚举、StringClass、注解、以上数据类型的一位数组

数组:如果在使用注解时数组只需要传入一个值,那么可以省略大括号;

小插曲:(1class文件里的东西不是字节码,只有把class里的东西转换加载到内存,那么内存里的东西才叫字节码

(2)if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){里的AnnotationTest.class.指的是内存中的字节码

(3)@Override@SuppressWarnings@Deprecated的生命周期分别是:源文件,源文件、运行时(通过查JDK文档可以得知)

   (4(interface ) Typeclassinterfaceenum@interface...

   (5)其它元注解:

     @Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.

@Inherited: 被它修饰的 Annotation 将具有继承性.如果某个类使用了被 

@Inherited 修饰的 Annotation, 则其子类将自动具有该注解

 

5.一个完整案例:

//定义注解:@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.TYPE})//ElementType.TYPE表示可以加在type类型上(class,interface......)public @interface ItcastAnnotation {String color() default "blue";String value();int[] arrayAttr() default {3,4,4};EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");}//使用注解: @ItcastAnnotation(annotationAttr=@MetaAnnotation("mr"),color="black",value="xxx",arrayAttr=3)public class AnnotationTest {...} //反射注解: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());} 


 

0 0
原创粉丝点击