java注解

本文深入探讨Java注解的概念、使用方式以及自定义注解的实现,详细介绍了标记注解、元注解及其作用,并阐述了注解的参数类型、使用方法和处理机制。此外,还展示了如何在编译时和运行时处理注解,以及Java编译器对注解的支持。

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

注解

1.注解使得Java源代码中不但可以包含功能性的实现代码,还可以添加元数据。注解的功能类似于代码中的注释,所不同的是注解不是提供代码功能的说明,而是实现程序功能的重要组成部分。Java注解已经在很多框架中得到了广泛的使用,用来简化程序中的配置。

2.标记注解,它的出现就代表了某种配置语义,没有元素的注解称为标记注解。而其它的注解是可以有自己的配置参数的。配置参数以名值对的方式出现。

3.在代码中使用注解,就相当于把一部分元数据从XML文件移到了代码本身之中,在一个地方管理和维护。

4.注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

5.java.lang.annotation。


自定义注解

(1)@interface用来声明一个注解。

其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。可以通过default来声明参数的默认值。


最常见的注解

  • @Override:用在方法之上,用来告诉别人这一个方法是改写父类的
  • @Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
  • @SuppressWarnings:暂时把一些警告信息消息关闭
  • @Entity:表示该类是可持久化的类


元注解,用来声明注解本身的行为。

@Retention用来声明注解的保留策略,有CLASS、RUNTIME和SOURCE这三种,分别表示注解保存在类文件、JVM运行时刻和源代码中。

只有当声明为RUNTIME的时候,才能够在运行时刻通过反射API来获取到注解的信息。

@Target用来声明注解可以被添加在哪些类型的元素上,如类型、方法和域等。

@Target

表示该注解可以用于什么地方,可能的ElementType参数有:

CONSTRUCTOR:构造器的声明

FIELD:域声明(包括enum实例)

LOCAL_VARIABLE:局部变量声明

METHOD:方法声明

PACKAGE:包声明

PARAMETER:参数声明

TYPE:类、接口(包括注解类型)或enum声明

@Retention

表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:

SOURCE:注解将被编译器丢弃

CLASS:注解在class文件中可用,但会被VM丢弃

RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。

@Document

将注解包含在Javadoc中

@Inherited

允许子类继承父类中的注解



注解的参数的可用的类型包括以下几种:所有基本类型、String、Class、enum、Annotation、以上类型的数组形式。参数不能有不确定的值,即要么有默认值,要么在使用注解的时候提供元素的值。而且参数不能使用null作为默认值。注解在只有一个元素且该元素的名称是value的情况下,在使用注解的时候可以省略“value=”,直接写需要的值即可。


使用注解

如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。

在程序中添加的注解,可以在编译时刻或是运行时刻来进行处理。

JDK 5中提供了apt工具用来对注解进行处理。在JDK 6中,Java编译器本身就可以完成对注解的处理。

 从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。编写注解处理器的核心是AnnotationProcessorFactory和AnnotationProcessor两个接口。


一、运行时处理注解:

ClassA.class.isAnnotationPresent(AnnotationB.class)     检查类ClassA是否含有@AnnotationB注解
ClassA.class.getAnnotation(AnnotationB.class)              取得类ClassA中的@AnnotationB注解
Annotation[]   getAnnotations()                                           返回该程序元素上存在的所有注解
Annotation[]    getDeclaredAnnotations()                           返回直接存在于该程序元素上的所有注解,忽略继承的注解。如果没有注解直接存在于该元素上,则返回长度为0的一个数组。
注解处理器类库 java.lang.reflect.AnnotatedElement
java使用Annotation接口,该接口是所有Annotation类型的父接口。java.lang.reflect.AnnotatedElement接口,表示程序中可以接受注解的程序元素,该接口主要的几个实现类:
        Class:类定义
  Constructor:构造器定义
  Field:累的成员变量定义
  Method:类的方法定义
  Package:类的包定义











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值