Java基础第十一天

该文档是:Luo学习Java笔记...

博客连接:https://www.loveuluo.cn

日期:2020-11-17

1. 注解概述

image-20201117161649197

2. JDK内置的重要注解

image-20201117163711746

Override注解:

image-20201117162150858

Deprecated注解:

image-20201117165743528

image-20201117165707660

image-20201117165526234

3. 常用的元注解

image-20201117164535792

下图:因为Override被RetentionPolicy.SOURCE注解,所以他最终只保存在java原文件中,class文件编译的时候这东西就会不存在,

因为Override只是给编译器看的,所以生成的class文件里没有这个代码也没必要存在。

image-20201117164118938

下图:表示 该注解可以出现在:构造方法上 字段上 局部变量上 方法上 类上.....,并且被保存在class文件中而且可以被反射所读取。

image-20201117165930622

4. 注解中定义属性

4.1 定义一个注解和其中的小技巧

因为定义了默认值,所以这时候age可以写,也可以不写,不写就是默认值。**

自定义注解:

image-20201117170924173

测试注解:

image-20201117170935765

小技巧:如果一个注解的属性的名字是value,并且只有一个属性的话,在使用的时候,该属性名可以省略。

如果有两个属性的话那么属性名(value)就不能省略。

自定义注解:

image-20201117171446666

测试注解:

image-20201117171435573

4.1 注解中的属性可以是哪种类型

类型:

image-20201117185044576

枚举类:

image-20201117185930327

自定义注解:

image-20201117185919193

测试类:如果数组中只有1个元素,大括号可以省略

image-20201117185957334

5. Retention的源代码(了解)

RetentionPolicy是一个枚举类型,在Retention中相当于属性,而value可以不写所以@Retention(RetentionPolicy.RUNTIME)就代表值是RUNTIME。

image-20201117191028839

6. 反射注解

6.1 例子一:获取类上的注解的值

自定义注解:(RUNTIME代表可以被反射获取)

image-20201117192558320

使用注解的类:

image-20201117192713641

通过反射获取注解测试类:直接通过 注解对象.属性名 (myAnnotation.value())可以获取到属性的值。

image-20201117192640341

6.2 例子二:获取方法上的注解的值

自定义注解:

image-20201117193524768

反射注解:

image-20201117193539738

7. 总结:注解在开发中的作用和案例

当一个User类被@MustHasIdPropertyAnnotation注解修饰时,在反射注解测试类中编写条件,先通过反射获取User类,再进行判断User类上有没有带上@MustHasIdPropertyAnnotation注解,如果有的话那么设置条件,如果被@MustHasIdPropertyAnnotation注解的类中获取所有Field,如果没一个名称

为id类型是int的Field对象,则抛出异常,如果有则合法。(可以起到规范的作用)

自定义注解:

image-20201117195521706

User类:

image-20201117195341589

自定义异常类:

image-20201117195350697

反射注解测试类:

image-20201117195500372

最后修改:2020 年 11 月 28 日 09 : 52 AM
如果觉得我的文章对你有用,请随意赞赏