java注解和自定义注解_java注解与自定义注解
发布日期:2021-06-24 13:05:52 浏览次数:2 分类:技术文章

本文共 1879 字,大约阅读时间需要 6 分钟。

注解简介

注解(Annontation),Java5引入的新特性,位于java.lang.annotation包中。提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。是一种说明、配置、描述性的信息,与具体业务无关,也不会影响正常的业务逻辑。但我们可以用反射机制来进行校验、赋值等操作。

常见的注解:@Override,@author,@param,@Deprecated,@SuppressWarnings

注解的常见用途

生成文档的注解,如@author,@param。

跟踪代码依赖性,实现替代配置文件功能,如spring mvc的注解。

编译时进行格式检查,如@override。

编译时进行代码生成补全,如lombok插件的@Data。

注解基础知识

注解的定义

注解的定义通过@interface表示,所有的注解会自动继承java.lang.Annotation接口,且不能再继承别的类或是接口。

注解的成员参数只能用public或默认(default) 访问权修饰来进行修饰。

成员参数只能使用八种基本类型(byte、short、char、int、long、float、double、boolean)和String、Enum、Class、annotations等数据类型,及其数组。

获取类方法和字段的注解信息,只能通过Java的反射技术来获取 Annotation 对象。

注解可以没有定义成员,只做标识。

元注解

元注解是专门用来注解其他注解的注解,听起来有些绕口,实际上就是专门为自定义注解提供的注解。java.lang.annotation提供了四种元注解:

@Documented – 注解是否将包含在JavaDoc中

@Retention – 什么时候使用该注解

@Target – 注解用于什么地方

@Inherited – 是否允许子类继承该注解

@Repeatable - 是否可重复注解,jdk1.8引入

注解的生命周期

通过@Retention定义注解的生命周期,格式如下:

@Retention(RetentionPolicy.SOURCE)

其中RetentionPolicy的不同策略对应的生命周期如下:

RetentionPolicy.SOURCE : 仅存在于源代码中,编译阶段会被丢弃,不会包含于class字节码文件中。@Override, @SuppressWarnings都属于这类注解。

RetentionPolicy.CLASS : 默认策略,在class字节码文件中存在,在类加载的时被丢弃,运行时无法获取到。

RetentionPolicy.RUNTIME : 始终不会丢弃,可以使用反射获得该注解的信息。自定义的注解最常用的使用方式。

注解的作用目标

通过@Target定义注解作用的目标,比如作用于类、属性、或方法等,默认可用于任何地方。格式如下:

@Target(ElementType.TYPE)

对应ElementType参数值适用范围如下:

ElementType.TYPE: 类、接口、注解、enum

ElementType.CONSTRUCTOR: 构造函数

ElementType.FIELD: 成员变量、对象、属性、枚举的常量

ElementType.LOCAL_VARIABLE: 局部变量

ElementType.METHOD: 方法

ElementType.PACKAGE: 包

ElementType.PARAMETER: 参数

ElementType.ANNOTATION_TYPE): 注解

ElementType.TYPE_PARAMETER:类型参数,表示这个注解可以用在 Type的声明式前,jdk1.8引入。

ElementType.TYPE_USE:类型的注解,表示这个注解可以用在所有使用Type的地方(如:泛型,类型转换等),jdk1.8引入。

Documented

@Documented,表示是否将此注解的相关信息添加到javadoc文档中。

Inherited

@Inherited,定义该注解和子类的关系,使用此注解声明出来的自定义注解,在使用在类上面时,子类会自动继承此注解,否则,子类不会继承此注解。注意,使用Inherited声明出来的注解,只有在类上使用时才会有效,对方法,属性等其他无效。

实例

下面通过一个实例来演示注解的使用:通过注解进行赋值和通过注解进行校验。

转载地址:https://blog.csdn.net/weixin_32946543/article/details/114865487 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java实时扫描某个表_MYSQL 查询优化之路-之DISTINCT全表扫描
下一篇:JAVA继承类phone_JAVA入门学习初步总结3 方法类继承多态等

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月03日 17时08分08秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

字节跳动Android金三银四解析:插件化框架解读之android系统服务实现原理,讲的明明白白! 2019-04-29
字节跳动架构师讲解Android开发!移动开发程序员怎么优雅迈过30K+这道坎?内含福利 2019-04-29
学Android看这就完事了!Android开发人员不得不收集的代码,深度好文 2019-04-29
安卓3d游戏开发视频!面试一路绿灯Offer拿到手软,详细的Android学习指南 2019-04-29
农民工看完都会了!GitHub上标星13k的《Android面试突击版》,吊打面试官系列! 2019-04-29
升职加薪必看!读完我这份《Android开发核心源码精编解析》面试至少多要3K!附答案 2019-04-29
华为架构师深入讲解Android开发!为什么Flutter能最好地改变移动开发?吐血整理 2019-04-29
基于安卓的兼职app开发!万字长文轻松彻底入门Flutter,终获offer 2019-04-29
大牛深入讲解!2021年Android网络编程总结篇,书籍+视频+学习笔记+技能提升资源库 2019-04-29
大牛深入讲解!算法题+JVM+自定义View,大厂内部资料 2019-04-29
太厉害了!记录一次腾讯Android岗面试笔试总结,全套教学资料 2019-04-29
如何成为杰出的程序员?阿里P8架构师的Android大厂面试题总结,已拿到offer 2019-04-29
字节跳动社招面试记录,关于网络优化你必须要知道的重点,附面试题答案 2019-04-29
大牛手把手带你!宅家36天咸鱼翻身入职腾讯,经典好文 2019-04-29
大牛深入讲解!Android高级工程师面试实战,一线互联网公司面经总结 2019-04-29
如何成为杰出的程序员?2021年Android高级面试题,2年以上经验必看 2019-04-29
字节跳动社招面试记录,2021年上半年最接地气的Android面经,实战解析 2019-04-29
学习安卓开发!我凭什么拿到了阿里、腾讯、今日头条3家大厂offer?再不刷题就晚了! 2019-04-29
安卓3d游戏开发视频!春招我借这份PDF的复习思路,完整版开放下载 2019-04-29
安卓app开发!大厂Offer拿到手软啊!年薪超过80万! 2019-04-29