【总结篇】Java注解总结
版权声明:本文为 小异常 原创文章,非商用*转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/89381325
文章目录
注解 在 Java5 提出的一个特性,写法简单。注解是 Java 中的 metadate(元数据),其实就是代码里的 “特殊标记”,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
注解 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。
使用 注解 时要在前面加
@
符号,并把该注解当成一个修饰符使用。
一、JDK内置的基本注解类型(3个)
1、@Override
限定重写父类方法,该注解只能用于方法。
2、@Deprecated
用于表示已过时。
3、@SuppressWarnings("all")
抑制编译器警告。
二、元注解(对注解进行注解)(4个)
元注解 是用于修饰其他的注解定义,专门在注解上的注解类型。
元注解: @Retention 、@Target、@Documented、@Inherited
1、@Retention
表示需要在什么级别保存该注解信息,用于描述注解的生命周期。
- RetentionPolicy.SOURCE: 只在源文件中有效,编译器和运行时不会保留。
- RetentionPolicy.CLASS: 只有在源文件和字节码文件中有效,运行时不会保留。
- RetentionPolicy.RUNTIME: 在源文件、字节码文件和运行时有效,程序可以通过反射获取该注解。
2、@Target
注解的描述范围(也就是此注解在什么地方用)。
- ElementType.TYPE: 类型(类、接口或枚举声明)
- ElementType.FIELD: 属性
- ElementType.METHOD: 方法
- ElementType.PARAMETER: 参数
- ElementType.CONSTRUCTOR: 构造器
- ElementType.LOCAL_VARIABLE: 局部变量
使用位置:
@类型注解
public class MyClass {
@属性注解
private int age;
@构造器注解
public MyClass() {
}
@方法注解
public void eat(@参数注解 String str) {
@局部变量注解
int a = 10;
}
}
3、@Documented
被此注解修饰的类,会被 javadoc 工具提取成文档。
4、@Inherited
被它修饰的注解将具有继承性。如果某个类使用了被此注解修饰的注解,则其子类将自动具有该注解(实际开发中,使用较少)。
三、重复注解(Java8新增)
重复注解 就是可以重复使用同一个注解。(在 Java8 之前有一个限制,同一个地方的不能使用同一个注释超过一次)
1、例如
@MyAnno("hello")
@MyAnno("world")
public void show() {
}
2、使用方式
1)先自定义一个注解
2)再自定义一个注解容器
3)在自定义注解上声明@Repeatable,并指明该注解的容器
小栗子:
// 自定义注解
@Repeatable(MyAnnos.class)
@Target({METHOD})
public @interface MyAnno {
String value();
}
// 自定义注解容器
@Target({METHOD})
public @interface MyAnnos {
MyAnno[] value();
}
3、应用
// 通过反射获取该方法上的所有注解
@Test
public void test1() throws Exception {
Class<TestAnnotation> clazz = TestAnnotation.class;
Method m1 = clazz.getMethod("show");
// 获取MyAnno类型的重复注解
MyAnno[] mas = m1.getAnnotationsByType(MyAnno.class);
// 遍历重复注解
for (MyAnno ma : mas) {
System.out.println(ma.value());
}
}
四、自定义注解
// 次注解可以在类型及方法上使用,并可以通过反射获取该注解
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ClassAnno {
String value() default " "; // String是参数类型,value是参数名,default是默认值
}
注:如果只有一个参数,一般定义为 value,只有 value 在调用注解时才可以省略。
上一篇: UPC-5175 - Blowing Candles - 计算几何
下一篇: 常用的数学计算工具类