java高级之注解详解
注解的本质和使用:
- java中的注解都是继承了Annotation的一个接口。
- java语言规范规定了注解的定义要用@interface。
- 注解的作用:
a) 注解配合反射可以很好起到了配置文件的作用。
反射请看:https://blog.csdn.net/qq_40837310/article/details/104043024
b) 起标记作用。
c) …
//定义语法
public @interface MyAnnotation{
}
//注解的实质是一个继承了Annotation接口的接口。
//以上通过反编译后:
//Public interface MyAnnnotation extends Annotation{} 但是我们定义注解时不能以这种语法定义,
是错误的,编译器识别不了这个是注解。
元注解:
定义:注解的注解,就是只能作用在注解上的注解。
jdk四大元注解:
//定义注解能使用的元素,ElementType是一个枚举类。
1. @Target(value = {ElementType}) public enum ElementType {/** Class, interface (including annotation type), or enum declaration *///类、接口、枚举、注解。这个是默认的策略。TYPE,/** Field declaration (includes enum constants) *///成员变量、枚举实例FIELD,/** Method declaration *///方法METHOD,/** Formal parameter declaration *///参数PARAMETER,/** Constructor declaration *///构造器CONSTRUCTOR,/** Local variable declaration *///局部变量LOCAL_VARIABLE,/** Annotation type declaration *///注解类型ANNOTATION_TYPE,/** Package declaration *///包:package-info filePACKAGE,/*** Type parameter declaration** @since 1.8*///泛型参数,声明泛型参数时。TYPE_PARAMETER,/*** Use of a type** @since 1.8*///泛型参数,使用泛型时。TYPE_USE
}//定义注解的声明周期,RetentionPolicy是一个枚举类。定义了生命周期类型。
2. @Retention(value = RetentionPolicy) public enum RetentionPolicy {/*** Annotations are to be discarded by the compiler.*///注解会在编译后消除,注解的生命周期仅仅在源代码。SOURCE,/*** Annotations are to be recorded in the class file by the compiler* but need not be retained by the VM at run time. This is the default* behavior.*///注解会在程序运行在JVM时消除,注解的生命周期在源代码节点和编译后的阶段。这个是默认策略。CLASS,/*** Annotations are to be recorded in the class file by the compiler and* retained by the VM at run time, so they may be read reflectively.** @see java.lang.reflect.AnnotatedElement*///注解会在运行时任然有效。//因为反射是作用在运行时的。所以如果要注解能被反射获取到,必须要把生命周期设置为这个RUNTIME
}//标记该注解会包含在生成的用户文档中。
3. @Documented //标记使得该注解具有继承特性,假如一个注解注解了该元注解,并且该注解修饰了一个类,那么该注解也会修饰该类的子类。这个只在类的继承中有效。接口与实现类之间,获取方法,成员变量等等之间都无效。
4. @Inherited
注解的详细定义:
@Inherited
@Documented
@Target(value = {ElementType.TYPE,ElementType.PACKAGE,ElementType.TYPE_PARAMETER,ElementType.TYPE_USE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface TestAnnotation {String value();String[] array() default {};int age() default 5;TestAnno teacher() default @TestAnno;ElementType ELEMENT_TYPE() default ElementType.ANNOTATION_TYPE;}
使用:
@TestAnnotation(value = "kkk",array = {},teacher = @TestAnno,ELEMENT_TYPE = ElementType.CONSTRUCTOR)
public class Teacher {}//说明:
//1. 注解支持的元素有八大基本类型,String,注解类型,枚举类型,Class类型以及上述类型的数组。
//2. 元素的名称后面要加一堆小括号(),多个元素用分号;分隔。
//3. 可以给注解中的元素设置默认值(小括号后 default 默认值)。
//当使用该注解时没有给元素赋值,就使用默认值,如果某个元素没有设置默认值,则使用时必须赋值。
//4.使用时 如果赋值仅仅是给value()元素赋值,则无需说明元素名称。比如:
@TestAnnotation("ddd")
public enum TeacherEnum {
}
//但是最好加上value = "ddd" ,这样看起来更加清晰,如果要设置多个元素的值,就必须要加上value元素名了。
java高级之注解详解相关推荐
- Java Annotation自定义注解详解
在开发过程中总能用到注解,但是从来没有自己定义过注解.最近赋闲在家,研究整理了一番,力求知其然知其所以然. 本文会尝试描述什么是注解,以及通过一个Demo来说明如何在程序中自定义注解.Demo没有实际 ...
- Java | SpringBoot 常用注解详解
1 概述 IOC 是Spring 最为重要的功能之一,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式. 简言之,注解本身没有 ...
- java高级之泛型详解
定义:在java1.5之后推出的. 泛型又叫参数化类型或者类型参数化,在不创建新的类型的情况下,通过泛型指定不同类型来控制形参具体限制的类型,姑且把声明在类上的泛型也叫形参. 泛型应用的意义: 在编译 ...
- java method 注解_JAVA 注解详解及简单实例
JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档 这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
- Java单元测试之JUnit4详解
2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...
- mybatis注解详解
mybatis注解详解 首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则 ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
- 蘑菇街2015校招 Java研发笔试题 详解,2015java
蘑菇街2015校招 Java研发笔试题 详解,2015java 1. 对进程和线程描述正确的是( ) A. 父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B. 改变 ...
最新文章
- 安装centos 7 桌面
- 【Python排序搜索基本算法】之拓扑排序
- ElasticSearch 2 (37) - 信息聚合系列之内存与延时
- 《Python Cookbook 3rd》笔记(1.3):保留最近N个元素
- 计算机录音机应用程序在哪,windows7如何给电脑录音 windows7录音机在哪
- GAE-BBS v.10 开源下载
- WireShark抓包分析
- 计算机专业实训是干什么,计算机系实习目的是什么
- Silverlight载入动画(简易)
- ARM 开发板修改MAC地址
- 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里
- afudos备份bios不动_映泰主板刷新AMI BIOS失败自救
- Thief-Book 上班摸鱼神器
- Linux下父进程子进程先后终止的不同处理
- 总结学过的技术,实现加密注册,登录及过期不能访问,微信朋友圈功能,文章比较长,但是比较详细。
- pycharm创建的.py文件显示为.txt文件样式
- 双精度浮点数的取绝对值
- 最新Mybatis插入数据返回自增主键详细配置
- 校招面试——Java 基础知识
- 「MoreThanJava」Java 发展史及起航新世界
热门文章
- Spring Boot基础学习笔记23:用户自定义授权管理
- 12.混淆——数字音频采样,混淆,反混淆,脉冲序列_2
- 英语中正式和休闲的打招呼_6
- 微型计算机中外储存器比内储存器,计算机笔试复习题集共23页.doc
- 全国计算机考试一级在线模拟,2017全国计算机一级考试模拟
- 2017.5.9 寻找道路 思考记录
- 小学阅读方法六种_小学数学速算六种方法
- fwrite函数Matlab,fread和fwrite函数,C语言fread和fwrite函数详解
- sqlite 模糊匹配日期_SQLite模糊查找(like) | 学步园
- 加密和解码(不同加密方法:随机数,hash,出现次数)