加载中...
加载中...
【总结篇】Java注解总结

【总结篇】Java注解总结 转载

注解 在 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: 局部变量
使用位置:

复制Java@类型注解
public class MyClass {
@属性注解
private int age;
@构造器注解
public MyClass() {

}
@方法注解
public void eat(@参数注解 String str) {
@局部变量注解
int a = 10;
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3、@Documented

被此注解修饰的类,会被 javadoc 工具提取成文档。

4、@Inherited

被它修饰的注解将具有继承性。如果某个类使用了被此注解修饰的注解,则其子类将自动具有该注解(实际开发中,使用较少)。

三、重复注解(Java8新增)

重复注解 就是可以重复使用同一个注解。(在 Java8 之前有一个限制,同一个地方的不能使用同一个注释超过一次)

1、例如

复制Java@MyAnno("hello")
@MyAnno("world")
public void show() {

}
  • 1
  • 2
  • 3
  • 4
  • 5

2、使用方式
1)先自定义一个注解
2)再自定义一个注解容器
3)在自定义注解上声明@Repeatable,并指明该注解的容器

小栗子:

复制Java/*自定义注解*/
@Repeatable(MyAnnos.class)
@Target({METHOD})
public @interface MyAnno {
String value();
}

/* 自定义注解容器*/
@Target({METHOD})
public @interface MyAnnos {
MyAnno[] value();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12


3、应用

复制Java/* 通过反射获取该方法上的所有注解*/
@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());
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

四、自定义注解

复制Java/* 次注解可以在类型及方法上使用,并可以通过反射获取该注解*/
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ClassAnno {
String value() default " "; // String是参数类型,value是参数名,default是默认值
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注:如果只有一个参数,一般定义为 value,只有 value 在调用注解时才可以省略。  

————————————————
版权声明:本文为CSDN博主「小异常」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sun8112133/java/article/details/89381325


架构 Spring   
没有更多推荐了 [去首页]
image
文章
357
原创
284
转载
73
翻译
0
访问量
199057
喜欢
47
粉丝
6
码龄
5年
资源
0

文章目录

加载中...
0
0