注解 java_java注解

一、java自身的注解

@Deprecated 表明当前的元素已经不推荐使用

@Override 表明当前方法是覆盖了父类方法

@SuppressWarnings 关闭编译器警告信息

二、自定义注解

接口声明

1 @Target(ElementType.METHOD)2 @Retention(RetentionPolicy.RUNTIME)3 public @interfaceMyMethodAnnotation {4

5 }

使用自定义注解

1 public classAnnotationDemo {2

3 @MyMethodAnnotation4 public voidtest() {5

6 }7

8 @MyMethodAnnotation9 public voidtest2() {10

11 }12

13 public voidtest3() {14

15 }16 }

测试

1 public classClient {2

3 public static voidmain(String[] args) {4 Method[] methods = AnnotationDemo.class.getMethods();5 for(Method m : methods) {6 if(m.isAnnotationPresent(MyMethodAnnotation.class)) {7 System.out.println("----- " + m.getName() + " -------");8 }9 }10 }11 }

结果

----- test -------

----- test2 -------

三、元注解

作用负责注解其它注解

@Target

@Retention

@Documented

@Inherited

1、@Target : 描述注解的使用范围

取值(ElementType)有,

public enumElementType {/**Class, interface (including annotation type), or enum declaration*/TYPE, // 用于描述类、接口(包括注解类型) 或enum声明/**Field declaration (includes enum constants)*/FIELD, // 用于描述域/**Method declaration*/METHOD, // 用于描述方法/**Parameter declaration*/PARAMETER, // 用于描述参数/**Constructor declaration*/CONSTRUCTOR, // 用于描述构造函数/**Local variable declaration*/LOCAL_VARIABLE, // 用于描述局部变量/**Annotation type declaration*/ANNOTATION_TYPE,/**Package declaration*/PACKAGE // 用于描述包

}

2、@Retention : 描述注解的生命周期

public enumRetentionPolicy {/*** Annotations are to be discarded by the compiler.*/SOURCE, //在源文件有效 保留在源文件/*** Annotations are to be recorded in the class file by the compiler

* but need not be retained by the VM at run time. This is the default

* behavior.*/CLASS, //在class文件有效 保留在class文件/*** Annotations are to be recorded in the class file by the compiler and

* retained by the VM at run time, so they may be read reflectively.

*

*@seejava.lang.reflect.AnnotatedElement*/RUNTIME //在运行时有效 运行时保留

}

3、@Documented : 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化

4、@Inherited :阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

四、启示

想想,自定义注解还是有很多好处的。junit测试框架,方法上注解@Test,@Before, @After。没看过它的底层实现,不过仔细想想,无非也是通过运行期反射去拿到定义在方法的注解,

根据不同注解类型,来执行不同的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值