java 注解调用_java 注解使用

注解就相当于一个类,使用一个注解就相当于创建了注解类的一个实例对象

java内置注解,如

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

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

@SuppressWarnings 意思是“压缩警告”

注解(Annotation)相当于一种标记,javac编译器、开发工具等根据反射来了解你的类、方法、属性等元素是有具有标记,根据标记去做相应的事情。标记可以加在包、类、属性、方法、方法的参数及局部变量上。

7e139e12558403d29db13db774500491.png

注解就相当于一个你的源程序要调用一个类,在源程序中应用某个注解,得事先准备好这个注解类。就像你要调用某个类,得事先开发好这个类。

在一个注解类上使用另一个注解类,那么被使用的注解类就称为元注解。用来修饰自定义注解的Retention就是元注解,Retention有个RetentionPolicy类型的value();属性,有三种取值

如果一个注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默认值或者你只有一个value属性),那么可以省略掉“value=”部分。例如@SuppressWarnings("deprecation")

RetentionPolicy.SOURCE,只在java源文件中存在(.java),编译后不存在。如果做一些检查性的操作如 @Override 和 @SuppressWarnings,使用此注解

RetentionPolicy.CLASS,注解被保留到.class文件,,但jvm加载class文件时候被遗弃,这是默认的生命周期;(很遗憾,尽管看了很多博客我也没搞清这个)

RetentionPolicy.RUNTIME,注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解

综合示例:

MyAnnotation注解:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;

@Target({ElementType.TYPE,ElementType.METHOD})//target注解决定MyAnnotation注解可以加到哪些成分上

@Retention(RetentionPolicy.RUNTIME)//Retention注解决定MyAnnotation注解的生命周期

public @interfaceMyAnnotation {

String color()default "blue";//定义基本属性,并指定默认值

String value();//定义一个名称为value的属性。value是特殊的基本属性

int[] arr() default {1,2,3};//定义一个数组类型的属性

ColorEnum clor() default ColorEnum.RED;//枚举类型的属性并指定默认值

MetaAnnotation authorName() default @MetaAnnotation("yanan");//MyAnnotation注解里使用MetaAnnotation注解,MetaAnnotation就被成为元注解

}

View Code

MetaAnnotation注解:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** TODO 做为元注解用

* 2020年8月5日

*@authorzhangyanan*/

public @interfaceMetaAnnotation {

String value();//设置特殊属性value

}

View Code

ColorEnum枚举:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** TODO 枚举类型的颜色

* 2020年8月5日

*@authorzhangyanan*/

public enumColorEnum {

RED,BLUE,BLACK,YELLOW,WHITE,PINK

}

View Code

TestAnnotation测试类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@MyAnnotation("zyn")//此处的zyn是对MyAnnotation特殊属性value的赋值

public classTestAnnotation {public static voidmain(String[] args) {//利用反射检查TestAnnotation类是否有注解

if(TestAnnotation.class.isAnnotationPresent(MyAnnotation.class)) {

MyAnnotation annotation= TestAnnotation.class.getAnnotation(MyAnnotation.class);

System.out.println(annotation.color());

System.out.println(annotation.value());

System.out.println(annotation.clor());

System.out.println(annotation.arr()[2]);

System.out.println(annotation.authorName().value());

}else{

System.out.println("TestAnnotation类没有MyAnnotation注解");

}

}

}

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值