java 注解总结

本文深入解析Java注解的各类特性,包括基本注解、元注解、自定义注解及注解处理器APT的使用,详细介绍了注解的分类、如何提取注解信息,并探讨了注解在实际开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本注解

java提供了五个基本注解

  1. @Override :指定方法负载的,它可以轻质一个子类必须覆盖父类中的方法,保证父类要包含一个被该方法重写的方法,否则就会编译出错。(只能修饰方法,不能修饰元素)
  2. @Deprecated :用于表示某个程序元素(如方法、类)已经过时,如果使用编译器会给出警告
  3. @SuppressWarning:被该注释注释的程序元素取消显示指定的编译警告,且该注释一直作用于该程序元素的所有子元素。
    例如:关闭整个类里的编译器警告
    @SuppressWarning(value=“unchrcked”)
  4. @SafeVarargs:修饰引发“堆污染”的方法和构造器,专门为抑制堆污染提供
  5. @FunctionalInterface:指定某个接口必须是函数式接口(接口只有一个抽象方法),只能修饰接口。

元注解

  1. @Retention:只能用于修饰注解,指定被修饰的注解可以保留多长时间(value)。
    1.RententionPolicy.CLASS:编译器将注解记录在class文件里,运行时,jvm取不到注解信息。这是默认值。
    2.RententionPolicy.RUNTIME:编译器将注解记录在class文件中。当程序运行时,jvm也可以获取到注解信息,程序通过反射来获取该注解信息
    3.RententionPolicy.SOURCE: 注解只保留在源代码中,编译器直接丢弃这种注解。
  2. @Target :用于指定被修饰的注解能修饰那些程序单元(ElementType [] value)
    1.ElementType.ANNOTATION_TYPE:指定该注解只能修饰注解
    2.ElementType.CONSTRUCTOR: 指定该注解只能修饰构造器
    3.ElementType.FIELD: 该注解只能修饰成员变量
    4.ElementType.LOCAL_VARIABLE:该注解只能修饰局部变量
    5.ElementType.METHOD: 该注解只能修饰方法
    6.ElementType.PACKAGE: 该注解只能修饰包
    7.ElementType.PARAMETER:该注解只能修饰参数
    8.ElementType.TYPE: 该注解可以修饰类、接口或枚举定义
  3. @Documented: 被该注解修饰的类将被javadoc工具提取成文档。如果定义注解时使用了@Documented修饰,那么该注解修饰的程序元素的API文档中会包含该注解说明。
  4. @Inherited:被它修饰的注解将具有继承性,如果某个类使用了@Xxx注解,则其子类自动的也被@Xxx修饰
    注:查看某个类是否具有某个注解的API :类名.class.isAnnotationPresent(注解名.class)

自定义注解

  1. 定义注解使用 @interface关键字
  2. 成员变量在注解中以无形参的方法形式来声明,其方法名和返回值定义了该成员变量的名字和类型。
  3. 可以使用default指定成员变量的初始值。
public @interface Student{
	String name();
	int age()  default 18;	
}

注解分类

1. 标记注解:没有成员变量的注解。这种仅利用自身的存在与否来提供信息,如@Override
2. 元数据注解: 包含成员变量的注解。因为他们可以接收更多的元数据,因此也被称为元数据注解。

提取注解信息

1.使用了注解修饰类、方法等成员后,这些注解并不会自己生效,必须由开发者提供工具来处理注解信息。
2.java.labg.annotation.Annotation接口时所有注解的父接口。AnnotatedElement接口是程序中所有可以接收注解的程序元素。有一下几个实现类。
1.Class:类定义
2.Constructor:构造器定义
3.Field: 类的成员变量定义
4.Method: 类的方法定义
5.Package:类的包定义
通过反射获取了某个类的AnnotatedElement对象(如 Class Method Field 等),程序就可以调用该对象的如下几个方法来访问注解信息。
1. get Annotation(Class annotationClass);返回元素上存在的指定类型的注解,无则返回null
2. getDeclaredAnnotation(Class annotationClass) 返回指定类型的直接修饰该元素的注解 不存在返回null
3. getAnnotations() 返回该程序元素上的所有注解
4. getDeclaredAnnotations():返回直接修饰该程序元素上的所有注解
5. boolean isAnnotationPresent(Class annotationClass) 判断该程序元素上是否存在指定类型的注解
6. 等等…
直接使用注解来标记程序不会对程序有任何影响 这也是java注解的重要原则一条

APT

1. APT(Annotation Processing Tool)是一种注解处理工具,它找出源代码中的注解 进行额外信息的处理。
2. java提供的javac.exe工具中有一个-processor选项,该选项可指定一个注解处理器,如果在编译java源文件时通过该选项指定了注解处理器,那么这个注解处理去将会在编译时提取并处理java源文件中的注解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值