Java 注解(Annotation)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 注解(Annotation),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4044字,纯文字阅读大概需要6分钟。
内容图文
1. 什么是Java注解(Annotation)
- Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。用来标注在Java语言中的类、方法、变量、参数等
- 和 Javadoc 不同,Java 注解可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。
- 支持自定义Java注解
2. Java注解(Annotation)的架构:
- 一个 Annotation 和一个 RetentionPolicy 关联,可以理解成每一个Annotation对象都有一个RetentionPolicy属性
- 一个 Annotation 和1~n个 ElementType 关联,可以理解成每一个Annotation对象可以有若干个ElementType属性
3. ElementType.java:
package java.lang.annotation; public enum ElementType { TYPE, /* 类、接口(包括注释类型)或枚举声明 */ FIELD, /* 字段声明(包括枚举常量) */ METHOD, /* 方法声明 */ PARAMETER, /* 参数声明 */ CONSTRUCTOR, /* 构造方法声明 */ LOCAL_VARIABLE, /* 局部变量声明 */ ANNOTATION_TYPE, /* 注释类型声明 */ PACKAGE /* 包声明 */ }
- ElementType 是 Enum 枚举类型,它用来指定 Annotation 的类型。例如,若一个 Annotation 对象是 METHOD 类型,则该 Annotation 只能用来修饰方法。
4. RetentionPolicy.java:
package java.lang.annotation; public enum RetentionPolicy { SOURCE, /* Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了 */ CLASS, /* 编译器将Annotation存储于类对应的.class文件中。默认行为 */ RUNTIME /* 编译器将Annotation存储于class文件中,并且可由JVM读入 */ }
- RetentionPolicy 是 Enum 枚举类型,它用来指定 Annotation 的策略。通俗点说,就是不同 RetentionPolicy 类型的 Annotation 的作用域不同。
- 若 Annotation 的类型为 SOURCE,则意味着:Annotation 仅存在于编译器处理期间,编译器处理完之后,该 Annotation 就没用了。 例如," @Override" 标志就是一个 Annotation。当它修饰一个方法的时候,就意味着该方法覆盖父类的方法;并且在编译期间会进行语法检查!编译器处理完后,"@Override" 就没有任何作用了。
- 若 Annotation 的类型为 CLASS,则意味着:编译器将 Annotation 存储于类对应的 .class 文件中,它是 Annotation 的默认行为。
- 若 Annotation 的类型为 RUNTIME,则意味着:编译器将 Annotation 存储于 class 文件中,并且可由JVM读入。
5. 注解(Annotation)通用定义:
@Documented @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation1 { }
- 这里使用@interface自定义一个注解为MyAnnotation1,定义好该注解后就可以通过@MyAnnotation1使用该注解
- @interface:该注解的作用是定义一个注解。通过@interface定义注解后,该注不能继承其他的注解后接口,且实现过程都是由编译器完成的
- @Documented:该注解的作用是使类和方法的Annotation出现在javadoc中。定义注解时,@Documented可有可无,若没有定义,默认是不出现在javadoc中
- @Target(ElementType.TYPE):该注解的作用是指定声明的注解是修饰在哪里的,定义时可有可无,若有则只能修饰所定义的地方,若无则可以修饰在任何地方
- @Retention(RetentionPolicy.RUNTIME):该注解的作用是指定声明的注解的策略,定义时可有可无,默认为RetentionPolicy.CLASS
6. Java常用的注解(Annotation):
- 元注解:作用在其他注解的注解
- @Documented:所标注的内容,可以出现在javadoc中
- @Inherited:只能被用来标注“Annotation”类型,所标注的注解具有继承性
- @ Retention:只能被用来标注“Annotation”类型,用来指定注解的RetentionPolicy属性
- @Target:只能被用来标注“Annotation”类型,用来指定注解的ElementType属性
- @SafeVarargs:java7开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告
- @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口
- @Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次
- 作用在代码的注解
- @Deprecated:所标注的内容不再被建议使用,例如有些过期的方法
- @Override:只能标注方法,表示该方法覆盖父类中的方法
- @SuppressWarnings:无视所标注内容产生的警告
7. 注解(Annotation)的作用:
- 编译检查:如@SuppressWarnings, @Deprecated 和 @Override 都具有编译检查作用。
- 反射中使用:
- 根据注解生成帮助文档:通过给 Annotation 注解加上 @Documented 标签,能使该 Annotation 标签出现在 javadoc 中。
- 能够帮忙查看代码:通过 @Override, @Deprecated 等,我们能很方便的了解程序的大致结构。
@Deprecated--@Deprecated所标注内容,不再被建议使用。
内容总结
以上是互联网集市为您收集整理的Java 注解(Annotation)全部内容,希望文章能够帮你解决Java 注解(Annotation)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。