| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 不吹牛逼,撸个注解有什么难的 -> 正文阅读 |
|
[Java知识库]不吹牛逼,撸个注解有什么难的 |
注解是 Java 中非常重要的一部分,但经常被忽视也是真的。之所以这么说是因为我们更倾向成为一名注解的使用者而不是创建者。 恐怕你会摇摇头,摆摆手,不好意思地承认自己的确没有自定义过。 ? 01、注解是什么注解(Annotation)是在 Java 1.5 时引入的概念,同 class 和 interface 一样,也属于一种类型。注解提供了一系列数据用来装饰程序代码(类、方法、字段等),但是注解并不是所装饰代码的一部分,它对代码的运行效果没有直接影响(这句话怎么理解呢?),由编译器决定该执行哪些操作。 来看一段代码,我随便写的,除了打印到控制台的那句宣传语,其他都不重要,嘻嘻。
注意到? 我之所以举这个无聊的例子就是为了证明一个观点:注解对代码的运行效果没有直接影响,明白我的用意了吧? 02、注解的生命周期注解的生命周期有 3 种策略,定义在 RetentionPolicy 枚举中。 1)SOURCE:在源文件中有效,被编译器丢弃。 2)CLASS:在编译器生成的字节码文件中有效,但在运行时会被处理类文件的 JVM 丢弃。 3)RUNTIME:在运行时有效。这也是注解生命周期中最常用的一种策略,它允许程序通过反射的方式访问注解,并根据注解的定义执行相应的代码。 03、注解装饰的目标注解的目标定义了注解将适用于哪一种级别的 Java 代码上,有些注解只适用于方法,有些只适用于成员变量,有些只适用于类,有些则都适用。 截止到 Java 9,注解的类型一共有 11 种,定义在 ElementType 枚举中。 1)TYPE:用于类、接口、注解、枚举 2)FIELD:用于字段(类的成员变量),或者枚举常量 3)METHOD:用于方法 4)PARAMETER:用于普通方法或者构造方法的参数 5)CONSTRUCTOR:用于构造方法 6)LOCAL_VARIABLE:用于变量 7)ANNOTATION_TYPE:用于注解 8)PACKAGE:用于包 9)TYPE_PARAMETER:用于泛型参数 10)TYPE_USE:用于声明语句、泛型或者强制转换语句中的类型 11)MODULE:用于模块 04、开始撸注解说再多,都不如撸个注解来得让人心动。撸个什么样的注解呢?一个字段注解吧,它用来标记对象在序列化成 JSON 的时候要不要包含这个字段。
1)JsonField 注解的生命周期是 RUNTIME,也就是运行时有效。 2)JsonField 注解装饰的目标是 FIELD,也就是针对字段的。 3)创建注解需要用到? 4)JsonField 注解有一个参数,名字为 value,类型为 String,默认值为一个空字符串。 为什么参数名要为 value 呢?有什么特殊的含义吗? 当然是有的,value 允许注解的使用者提供一个无需指定名字的参数。举个例子,我们可以在一个字段上使用? 那? 当然也是有的,它允许我们在一个字段上直接使用? 05、使用注解是骡子是马拉出来遛遛,对吧?现在? 假设有一个作者类,他有 3 个字段,分别是 age、name 和 bookName,后 2 个是必须序列化的字段。
1)name 上的? 2)bookName 上的? 接下来,我们来编写序列化类 JsonSerializer,内容如下:
JsonSerializer 类的内容看起来似乎有点多,但不要怕,我一点点来解释,直到你搞明白为止。 1) 2) 3) 看完我的解释,是不是豁然开朗了? ? 接下来,我们来写一个测试类 JsonFieldTest,内容如下:
程序输出结果如下:
从结果上来看: 1)Writer 类的 age 字段没有装饰? 2)Writer 类的 name 字段装饰了? 3)Writer 类的 bookName 字段装饰了? 06、鸣谢好了,我亲爱的读者朋友,以上就是本文的全部内容了,是不是感觉撸个注解也没什么难的?你也赶紧动动小手试试吧!原创不易,莫要白票,请你为本文点赞个吧,这将是我写作更多优质文章的最强动力。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 4:28:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |