博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK5-注解
阅读量:6958 次
发布时间:2019-06-27

本文共 2520 字,大约阅读时间需要 8 分钟。

注解是一个类,一个声明就是一个对象

 

1. 简单注解

  @SuppressWarnings("msg")  - 压缩/抑制警告

  @Deprecated  - 声明过时

  @Override   - 声明复写

 

2. 自定义注解

1 public @interface Anno {2 }

 

3. 注解的使用

1 @Anno2 public class AnnoTest {3     public static void main(String[] args) {4         if(AnnoTest.class.isAnnotationPresent(Anno.class)) {5             Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);6             ...7         }8     }9 }

  但是在这里我们发现:无法获取到Anno的实例,是因为Anno注解在加载进内存时去除了

  以此引出注解的生命周期

    源文件:RetentionPolicy.SOURCE(如SuppressWarnings及Override)

    class文件:RetentionPolicy.CLASS(默认

    内存字节码:RetentionPolicy.RUNTIME(如Deprecated)

 

4. 重定义注解

1 @Retention(RetentionPolicy.RUNTIME)2 public @interface Anno {3 }

    

5. 元注解

  元注解:对注解进行注解的注解(@Retention、@Target、@Documented和@Inherited)-> java.lang.annotation

  @Retention:设置注解的可见性(生命周期)

  @Target:设置注解的作用目标

  @Documented:指示javadoc应该为注解生成文档

  @Inherited:指示在子类继承父类时继承本注解

 

6. 注解的作用范围

  Target元注解:@Target(ElementType[])

    如:@Target({ElementType.TYPE, ElementType.METHOD})

      @Target(ElementType.TYPE)  // 一个元素可以省略{}

  ElementType.

    TYPE:所有元素(类、接口、枚举...)

    PARAMETER:参数

    PACKAGE:包

    METHOD:方法

    LOCAL_VARIABLE:局部变量

    FIELD:属性

    CONSTRUCTOR:构造器

    ANNOTATION_TYPE:注解

 

7. 为注解加属性(方法)

注解中属性的类型:八种基本类型、String、Class(ClassName.class)、enum以及上述类型的数组

1 @Retention(RetentionPolicy.RUNTIME) 2 public @interface Anno { 3     String color(); 4 } 5  6 @Anno(color="red") 7 public class AnnoTest { 8     public static void main(String[] args) { 9         if(AnnoTest.class.isAnnotationPresent(Anno.class)) {10             Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);11             System.out.println(anno.color());12         }13     }14 }

 

8. 为注解属性添加默认值  

  若注解内只有一个属性且名为value或除value外其他属性均有默认值时,赋值时可以省略value,如下:

1 @Retention(RetentionPolicy.RUNTIME) 2 public @interface Anno { 3     String value(); 4 } 5  6 @Retention(RetentionPolicy.RUNTIME) 7 public @interface Anno2 { 8     String color() default "red";// 为属性设置默认值 9     String value();10     int[] array() default {1, 2, 3};11     Anno annotation() default @Anno("Joshua");    // 注解中属性为注解12 }13 14 @Anno("Joshua")15 @Anno2("Joshua_AW")16 public class AnnoTest {17     public static void main(String[] args) {18         if(AnnoTest.class.isAnnotationPresent(Anno.class)) {19             Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);20             System.out.println(anno.value());21         }22     }23 }

Anno2也可也这样引用:@Anno2(color="blue", value="Joshua", array=1)

转载于:https://www.cnblogs.com/joshua-aw/p/6021291.html

你可能感兴趣的文章
1月2日云栖精选夜读 | 阿里巴巴达摩院发布2019十大科技趋势:语音AI在特定领域通过图灵测试 ...
查看>>
阿里云中间件有哪些?这里最全面
查看>>
scrapy自带文件下载器,实现多层级目录结构的存储 ...
查看>>
批处理 启动和关闭 Oracle 11g 服务
查看>>
解决WIN7启动DHCP服务报1075错误办法
查看>>
移动端弹性滑动以及vue记录滑动位置
查看>>
Windows10 VS2017 C++信号处理
查看>>
GPS定位系统源码GPS定位系统 GPSBD专为二次开发而设计 ...
查看>>
LocalDateTime API 整理
查看>>
ASK动画获三千资本A+轮投资,将加速推进原创动漫作品的创作 ...
查看>>
Postgresql服务器配置-设置参数
查看>>
你想了解Python中的 == 和IS 其他?
查看>>
最强求职攻略:java程序员如何通过阿里、百度社招面试
查看>>
B2B电商营销若有十分惊艳,九分在内容营销
查看>>
阿里云护航罗振宇2018“时间的朋友”跨年演讲,与千万观众一起跨年
查看>>
如何使用Hanlp加载大字典
查看>>
jdbc练习题
查看>>
CRM工具简介
查看>>
配置管理 ACM 在高可用服务 AHAS 流控降级组件中的应用场景
查看>>
生于疼痛的阿里云
查看>>