Java中的内置注解、元注解以及自定义注解

Java中的注解

注解(Annotation),也叫元数据,标签,注释。注解叫注释的时候,容易和java的代码注释混淆,一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

注解一般来说都会配合反射使用,通过反射技术获取到注解的相关信息才能在看似简介的代码中实现其完善的功能

(1) JDK四大内置注解

@Override注解用于标识方法重写,例如当前类中重写tostring()方法

@Deprecated注解用于标识方法已过时

@SuppressWarings注解用于抑制编译器警告,直白的讲就是消除Eclipse上那条黄色警告线,但编译器里关于这条警告的信息还在。

@SafeVarargs抑制堆污染警告(单独警告),直白的讲就是使用泛型和可变参数搭配使用将会产生的编译器警告,可以使用@SuppressWarnings消除警告,后来在Java7引入了新的注解,就是@SafeVarargs,如果开发人员确信某个使用了可变参数的方法,在与泛型类一起使用时不会出现类型安全问题,就可以用这个注解进行声明,这样编译器就不会报警告。

示例代码

public static <T> T useVarargs(T... args) {  
    return args.length > 0 ? args[0] : null;  
}                   

(2) 注解的作用

①编写文档:

事实上,在Java中我们可以通过注解去生成API文档,例如我们常见的参数值【@parameter】,返回值>【@return】等,只有标识了这些,我们才能通过API文档更快速和有条理的查看到对应的相关信息导出含有注解的API文档

1.选中项目,右键选中Export
2.Java下的Javadoc命令
3.Javadoc Generation中配置javadoc.exe【javadoc.exe在JDK环境中】
4.不做任何修改next
5.如果是UTF-8编码,且有中文,请输入-encoding UTF-8 -charset UTF-8
6.Finish

②代码分析

通过代码里标识的元数据对代码进行分析【使用反射】 (可以通过反射
看这个类有没有注解,有注解的时候,代码应该怎么写,没有注解的时候,应该怎么写)

③编译检查

通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】(如果一个代码,添加一个注解,会帮我们检查是不是正确)

(3) 元注解

元注解的作用就是用于定义其他注解,是由JAVA为我们提供的,不能更改,从JAVA5.0开始一共为我们提供了四个元注解。

@Target

@Target的作用

用于描述注解的使用范围,也就是说使用了@Target去定义一个注解,那么可以决定定义好的注解能用在什么地方

@Target的取值

@Target的取值使用ElementType,ElementType的相关说明可以通过JDK文档查询,也可以直接查看其源码

1.	CONSTRUCTOR//用于描述构造器
2.	FIELD//用于描述域
3.	LOCAL_VARIABLE//用于描述局部变量
4.	METHOD//用于描述方法
5.	PACKAGE//用于描述包
6.	PARAMETER//用于描述参数
7.	TYPE//用于描述类、接口(包括注解类型) 或enum声明
@Retention

@Retention的作用

用于描述注解的生命周期,也就是说这个注解在什么范围内有效,注解的生命周期和三个阶段有关:源代码阶段、CLASS文件中有效、运行时有效,故其取值也就三个值,分别代表着三个阶段

@Retention的取值

@Retention的取值适用RetentionPoicy,RetentionPoicy的相关说明可以通过JDK文档查询,也可以通过查看源码

1.	SOURCE//在源文件中有效(即源文件保留)
2.	CLASS//在class文件中有效(即class保留)
3.	RUNTIME//在运行时有效(即运行时保留)
@Documented

@Documented的作用

使用@Documented定义后的注解,在该注解使用后,如果导出API文档,会将该注解相关的信息可以被例如javadoc此类的工具文档化。
 
Documented是一个标记注解,没有成员。

@Inherited

@Inherited的作用

使用@Inherited定义的注解具备继承性
 
假设一个注解在定义时,使用了@Inherited,然后该注解在一个类上使用,如果这个类有子类,那么通过反射我们可以从类的子类上获取到同样的注解

(4) 自定义注解

语法

元注解
public @interface 注解名{
	类型 属性名() [default 默认值];
}

注解类型是和类、接口等一个级别的,要定义一个注解我们需要使用@interface关键字,同时需要注意定义的注解名前是不需要使用@符号的,但是在使用的时候,必须是@符号加上注解名,而且Java命名规范也不允许这样做

使用注解

@注解名(属性名="值")
@注解名(属性名={"值1","值2"})//注解类型为数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值