不用 注解 java_java注解

注解是一种标记,我们可以对拥有这种标记的元素进行处理

Annotation接口

14d6ffc8d54764d74ffe63fe6b4c520f.png

所有注解类型都要继承的一个公共接口。手动继承这个接口并不会定义一个注解类型。这个接口本身并不是用来定义注解类型的。

当我们使用@interface自定义注解时,隐含的继承了这个接口。

java类型

java有四种类型:类(class)、接口(interface)、注解(@interface)、枚举(enum)

4.  元注解

注解的注解称为元注解。元注解有四种。

3907eede6006120207fb07c1bf2af993.png

Target指定注解用在什么地方

Retention指定注解被保留多久

Inherited指定注解是否可以被继承

Documented指定注解是否被包含到javadoc中

Target有一个ElementType类型的数组value

a155f50930a4f3c521394a5fdaad8ed5.png

ElementType中定义的常量

d97ecc57c30a80ee61eda563293bfcae.png

TYPE表示注解只能加在类、接口(包括注解)、枚举上

METHOD表示注解只能加在方法上

。。。

Retention有一个RetentionPolicy类型的元素value。

下面是RetentionPolicy中定义的枚举常量

e83662ac1e599cab60fef1dc58137b23.png

默认的RetentionPolicy是CLASS。

5. 自定义注解

0b91e77012c406c8105471f4e6eb56fd.png

f59fb37d7e61e7ab994d64e15f41b527.png

4f1f9a52f8036abedd361e74ff1777c3.png

输出结果为null。因为,此时Hello注解RetentionPolicy为CLASS,表示编译时有效,运行时无效。也就是相当于在运行时没有Hello注解。如果我们将其改为RUNTIME,则输出结果如下:

7ee1c8315c53aa61c16e6d79e6cfa4f3.png

我们可以利用java反编译工具(Java Decompiler)查看一下Animal.class文件

3a55ac909c9b9675752c1e2776b6884b.png

假设,我们已经将RetentionPolicy改为RUNTIME

那么,下面的代码将输出结果

787c3f6b06f04749bd3c6bd47175548d.png

c7a8c8e7cb09ddae91861cd00e1fcc57.png

之所以能输出结果是因为Hello注解被Inherited所修饰,表示注解可被继承。

6.  注解的作用

注解给被注解的元素添加了额外的辅助信息,提供了一种统一处理的方式。如果没有外部解析工具对其加以解析和处理的话,它是不会对java源代码及class等产生任何影响,也不会影响程序的执行。

7.  注解是给反射用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值