java原生注解

参考:https://www.jianshu.com/p/e3d70761083c
https://blog.csdn.net/jiadajing267/article/details/81045292

一、JAVA原生注解

原生注解可以用在创建自定义注解上面!!!
创建自定义注解关键字:
@interface

  • 有利于代码的解藕、整洁,提升开发的效率!通俗来讲,注解就是标签,标签的内容可以变动!
  • 注解也是java中的一种数据类型!注解的创建和接口的创建很类似!使用@Interface修饰!
  • JDK本身自带的几种原生注解!也就是我们常说的元注解,原生注解是用于修饰自定义注解!JVM规范规定自定义注解必须使用些原生注解修饰,否则不能正常使用。

目前为止JDK自带的原生注解有6个:
@Retention :表示注解保留周期,用于提示注解被保留多长时间
@Target :表示注解可以使用在什么地方
@Inherited :注解写入文档 表示注解是否能被 javadoc 处理并保留在文档中
@Documented :注解写入文档 表示注解是否能被 javadoc 处理并保留在文档中
@Repeatable :表示注解的属性可以重复!同一种注解多次使用
@Native

其中,@Native、@Repeabable是在JDK1.8之后推出的元注解!

注解1 @Retention

@Retention表示注解保留周期,用于提示注解被保留多长时间
在这里插入图片描述
有三种取值:

  • RetentionPolicy.SOURCE:保留在源码级别,被编译器抛弃(常见的@Override注解就是此类);
  • RetentionPolicy.CLASS:被编译器保留在编译后的类文件级别,但是被虚拟机丢弃;
  • RetentionPolicy.RUNTIME:保留至运行时,可以被反射读取。

在这里插入图片描述
按生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码。
那怎么来选择合适的注解生命周期呢?
首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。
一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解
如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;
如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。

注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当我们方法的名字出错时,编译器就会报错
注解@Deprecated,用来表示某个类或属性或方法已经过时,不想别人再用时,在属性和方法上用@Deprecated修饰
注解@SuppressWarnings用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候

注解2 @Target

@Target: 表示注解可以使用在什么地方
在这里插入图片描述
常见的取值有:

  • ElementType.TYPE : 表示该注解可以被使用在 【类, 接口,注解,enum】上面
  • ElementType.FIELD : 表示该注解可以被使用在 【属性域】上面
  • ElementType.METHOD : 表示该注解可以被使用在 【方法】上面
  • ElementType.PARAMETER : 表示该注解可以被使用在 【参数】上面
  • ElementType.CONSTRUCTOR : 表示该注解可以被使用在 【构造函数】上面
  • E lementType.LOCAL_VARIABLE* : 表示该注解可以被使用在 【局部变量】上面
  • ElementType.ANNOTATION_TYPE : 表示该注解可以被使用在 【 注解类型】上面
  • ElementType.PACKAGE : 表示该注解可以被使用在 【包】上面
  • ElementType.TYPE_PARAMETER : 表示该注解可以被使用在 【输入参数】上面
  • ElementType.TYPE_USE :
    在这里插入图片描述

注解3 @Documented

注解写入文档 表示注解是否能被 javadoc 处理并保留在文档中。
在这里插入图片描述

注解4 @Inherited

子类继承父类的注解(子类没有任何注解修饰)
在这里插入图片描述

注解5 @Repeatable

@Repeatable : 表示注解的属性可以重复!同一种注解多次使用。可以用来表示某个对象存在多个身份。@Repeatable通俗来讲,就是注解容器!

JDK提供的其他注解

@Deprecated:用于标志过时的类、方法和成员变量
@Override:用于修饰重写的方法
@SuppressWarnings:用于忽略@Deprecated标志过的警告
@SafeVarargs:参数安全类型注解,用于提示用户参数安全(JDK1.7)
@FunctionalInterface:函数式接口注解,用于定义函数式接口(JDK1.8)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值