【Java编程思想笔记】注解--元注解
参考文章:(小白的小小白的白 )https://blog.csdn.net/weixin_42315600/article/details/80630669
https://www.cnblogs.com/skywang12345/p/3344137.html
学习网站:how2java.cn
一、元注解概念:
元注解的作用就是负责注解其他(如:自定义)注解,用来对其它 annotation类型作说明。
元注解是自定义注解的重要组成部分,其可以很好地描述自定义注解的信息。
二、元注解种类:
1、@Target : 说明了Annotation所修饰的对象范围作;用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
如其修饰的这个注解是只能放在类上,还是可以放在方法上,或者放在属性上
如@Target({ElementType.METHOD,ElementType.TYPE})就表示,这个注解可以放在方法和类型上(类和接口),但是不能放在属性或别的位置。
(1)ElementType.TYPE:能修饰类、接口或枚举类型
(2)ElementType.FIELD:能修饰成员变量
(3)ElementType.METHOD:能修饰方法
(4)ElementType.PARAMETER:能修饰参数
(5)ElementType.CONSTRUCTOR:能修饰构造器
(6)ElementType.LOCAL_VARIABLE:能修饰局部变量
(7)ElementType.ANNOTATION_TYPE:能修饰注解
(8)ElementType.PACKAGE:能修饰包
2、@Retention : 定义了该Annotation被保留的时间长短,使用这个meta-Annotation可以对注解的“生命周期”限制,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
(1)RetentionPolicy.SOURCE:表示注解只在源代码中存在,编译成.class之后就没了,@Override就是这样的注解
(2)RetentionPolicy.CLASS:注解在java文件编译成.class文件后依然存在,但是运行后就没了。其是@Retention的默认值
(3)RetentionPolicy.RUNTIME:注解在运行起来后依然存在,程序可以通过反射获取这些信息
3、@Inherited : 表示该注解具有继承性
假设,我们定义了某个Annotaion,它的名称是MyAnnotation,并且MyAnnotation被标注为@Inherited。现在,某个类Base使用了MyAnnotation,则Base具有了“具有了注解MyAnnotation”;现在,Sub继承了Base,由于MyAnnotation是@Inherited的(具有继承性),所以,Sub也“具有了注解MyAnnotation”。
//自定义一个可继承的注解
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Inheritable{
} //应用注解
@Inheritable
class InheritableFather{
public InheritableFather(){
System.out.println("InheritableFather "+InheritableFather.class.isAnnotationPresent(Inheritable.class));
}
} //继承应用了注解的类
public class InheritedTest extends InheritableFather{ public InheritedTest(){
super();//调用父类构造函数
//查看InheritedTest类是否具有Inheritable注解
System.out.println("InheritedTest "+InheritedTest.class.isAnnotationPresent(Inheritable.class));
} }
当使用InheritedTest构造函数后可以得到信息
InheritableFather true
InheritedTest true
所以,子类成功继承了注解@Iheritable
4、@Documented :一个简单的Annotations标记注解,表示是否将注解信息添加在java文档中。
@Documented 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化,Documented是一个标记注解,没有成员。
Documented 注解表明这个注解应该被 javadoc工具记录,默认情况下javadoc是不包括注解的,但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中。
5、@Repeatable :(java 1.8新增)当没有@Repeatable修饰的时候,注解在同一个位置,只能出现一次
而进行了@Repeatable注解的注解,可以多次出现,动态地提供数据,如例所示:
//定义一个可重复的注解,其@Repeatable值采用FileTypes
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(FileTypes.class)
public @interface FileType{
String value();
} //注解FileTypes,其value()返回一个FileType数组
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FileTypes{
FileType[] value();
}
【Java编程思想笔记】注解--元注解的更多相关文章
- Java编程思想 笔记
date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...
- java编程思想笔记(1)
java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自 ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- 2.1(java编程思想笔记)位移操作
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...
- 【Java编程思想笔记】注解1-简单了解注解
文章参考:https://www.cnblogs.com/xuningchuanblogs/p/7763225.html https://www.cnblogs.com/xdp-gacl/p/3622 ...
- 【Java编程思想笔记】注解--自定义注解
文章参考自:https://www.cnblogs.com/xdp-gacl/p/3622275.html 学习网站:how2java.cn 一.自定义注解的创建过程 第一步:(元注解) 使用元注 ...
- Java编程思想学习(十五) 注解
注解Annotation又叫元数据,是JDK5中引入的一种以通用格式为程序提供配置信息的方式.使用注解Annotation可以使元数据写在程序源码中,使得代码看起来简洁,同时编译器也提供了对注解Ann ...
- Java编程思想笔记
打好java基础 后续会增加相应基础笔试题 目录如下 1 对象导论2 一切都是对象3 操作符4 控制执行流程5 初始化与清理6 访问控制权限7 复用类8 多态9 接口10 内部类11 持有对象12 通 ...
- java编程思想笔记(一)——面向对象导论
1.1 抽象过程 1.所有编程语言都提供抽象编程机制. 2.人们所能够解决的问题的复杂性直接取决于抽象的类型(所抽象的是什么)和质量. 3."命令式"语言(basic,c等)都是对 ...
随机推荐
- JS正则四个反斜杠的含义
我们首先来看如下代码,在浏览器中输出的是什么? // 在浏览器中输出的 console.log('\\'); // 输出 \ console.log('\\\\'); // 输出 \\ 一:js正则直 ...
- WinForm程序完全退出总结
this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: Application.Exit(); 强制所有消息中止,退出 ...
- ORM框架的前世今生
目录 一.ORM简介二.ORM的工作原理三.ORM的优缺点四.常见的ORM框架 一.ORM简介 ORM(Object Relational Mapping)对象关系映射,一般指持久化数据和实体对象的映 ...
- Xshell 连接Linux服务器自动中断问题
Xshell连接上Linux服务器后经常自动中断连接,报错如下图: 解决方法如下,进入/etc/ssh目录打开sshd_config文件,找到下图两个参数并设置下图所示的值: 重启sshd即可解决,如 ...
- Python——Window启动服务
一.新建启动服务程序 # ZPF # encoding=utf-8 import win32timezone from logging.handlers import TimedRotatingFil ...
- python之内置函数(二)与匿名函数、递归函数初识
一.内置函数(二)1.和数据结构相关(24)列表和元祖(2)list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素).tuple:将一个可迭代对象转化成元组(如果是字典,默认将k ...
- win10应用商店打不开,错误代码0x80131500
我也突然遇到这个问题,一开始找各种方法也解决不了.然后在外网找到方法. 很多人只是把代理开了,只要关了就可以了.这点不累述,都会提到. 我的win10应用商店有两个错误代码0x80131500和0x8 ...
- 【LOJ2586】【APIO2018】选圆圈 CDQ分治 扫描线 平衡树
题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1,c_2,\ldots,c_n\) .我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为 \ ...
- Django_RBAC_demo2 升级版权限控制组件
RBAC 升级版 预期要求 前端在无权限时不在提供操作标签 更改部分硬编码 实现更加精准的权限控制 未改动前的版本 在这里 ⬇ Django_rbac_demo 权限控制组件框架模型 具体更改 数据库 ...
- Addrss already in user 解决方案 (linux)
Addrss already in user 解决方案 查pid netstat -lptu 查看当前用户的进程 pid kill -9 pid 杀进程 重复上面步骤一次, 因为一遍杀不死.他会换一 ...