Java自定义注解总结

Java注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序加上某种标记。可以通过 反射 来获取类上面的标记,程序可以通过标记去做相应的事。

标记可以加在包,类,属性、方法,方法参数,局部变量上。

自定义注解通过 @interface 实现,如下所示:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogOperation {
   /**
    * 定义基本属性:color
    * 应用属性:@LogOperation(color="red")
    */
   String color();

   /**
    * 为属性指定缺省值(默认值)
    * 语法:类型 属性名() default 默认值
    */
   String name() default "";

   /**
    * 如果一个注解中有一个名称为value的属性,且只想设置value属性(即其他属性都采用默认值或者只有一个value属性),那么可以省略掉“value=”部分
    * 用法:@LogOperation("111")
    */
   String value();
}

Jdk1.5开始提供了四个元注解,用于新注解的创建:@Target、@Retention、@Document、@Inherited

@Target:作用范围(类、方法、字段等),表示该注解可以用于什么地方

参考值类ElementType:

CONSTRUCTOR:构造器的声明

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

LOCAL_VARIABLE:局部变量声明

METHOD:方法声明

PACKAGE:包声明

PARAMETER:参数声明

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

@Retention:生命周期,表示需要在什么地方保存该注解信息,一个注解的生命周期有三个阶段:java源文件是一个阶段,class文件是一个阶段,内存中的字节码是一个阶段

参考值类RetentionPolicy:

SOURCE:在源文件中有效(即源文件保留,注解只在java源文件中存在,编译成.class文件后注解就不存在了)注解将被编译器丢弃

CLASS:在class文件中有效(即class保留,注解在java源文件(.java文件)中存在,编译成.class文件后注解也还存在)注解将被VM(虚拟机)丢弃

RUNTIME:在运行时有效(即运行时保留,程序运行时都存在)VM(虚拟机)将在运行期间保留注解,可以通过反射机制读取注解信息

@Document:将注解包含在Javadoc中,此注解会被javadoc工具提取成文档

@Inherited:允许子类继承父类中的注解,只能是类上的注解,方法和字段的注解不能被继承。即如果父类上的注解是@Inherited修饰的就能被子类继承

Jdk1.8又提供了两个元注解:

     @Native:指定字段是一个常量,其值引用native code

     @Repeatable:将注解包含在Javadoc中

Jdk1.5之后内部提供了三个注解:

@Deprecated:意思是“废弃的,过时的

@Override:意思是“重写、覆盖

@SuppressWarnings:意思是“压缩警告

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值