注解的本质和使用:

  1. java中的注解都是继承了Annotation的一个接口。
  2. java语言规范规定了注解的定义要用@interface。
  3. 注解的作用:
    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高级之注解详解相关推荐

  1. Java Annotation自定义注解详解

    在开发过程中总能用到注解,但是从来没有自己定义过注解.最近赋闲在家,研究整理了一番,力求知其然知其所以然. 本文会尝试描述什么是注解,以及通过一个Demo来说明如何在程序中自定义注解.Demo没有实际 ...

  2. Java | SpringBoot 常用注解详解

    1 概述 IOC 是Spring 最为重要的功能之一,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式. 简言之,注解本身没有 ...

  3. java高级之泛型详解

    定义:在java1.5之后推出的. 泛型又叫参数化类型或者类型参数化,在不创建新的类型的情况下,通过泛型指定不同类型来控制形参具体限制的类型,姑且把声明在类上的泛型也叫形参. 泛型应用的意义: 在编译 ...

  4. java method 注解_JAVA 注解详解及简单实例

    JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...

  5. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  6. Java单元测试之JUnit4详解

    2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...

  7. mybatis注解详解

    mybatis注解详解 首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则 ...

  8. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  9. 蘑菇街2015校招 Java研发笔试题 详解,2015java

    蘑菇街2015校招 Java研发笔试题 详解,2015java 1. 对进程和线程描述正确的是( ) A.  父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B.  改变 ...

最新文章

  1. 安装centos 7 桌面
  2. 【Python排序搜索基本算法】之拓扑排序
  3. ElasticSearch 2 (37) - 信息聚合系列之内存与延时
  4. 《Python Cookbook 3rd》笔记(1.3):保留最近N个元素
  5. 计算机录音机应用程序在哪,windows7如何给电脑录音 windows7录音机在哪
  6. GAE-BBS v.10 开源下载
  7. WireShark抓包分析
  8. 计算机专业实训是干什么,计算机系实习目的是什么
  9. Silverlight载入动画(简易)
  10. ARM 开发板修改MAC地址
  11. 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里
  12. afudos备份bios不动_映泰主板刷新AMI BIOS失败自救
  13. Thief-Book 上班摸鱼神器
  14. Linux下父进程子进程先后终止的不同处理
  15. 总结学过的技术,实现加密注册,登录及过期不能访问,微信朋友圈功能,文章比较长,但是比较详细。
  16. pycharm创建的.py文件显示为.txt文件样式
  17. 双精度浮点数的取绝对值
  18. 最新Mybatis插入数据返回自增主键详细配置
  19. 校招面试——Java 基础知识
  20. 「MoreThanJava」Java 发展史及起航新世界

热门文章

  1. Spring Boot基础学习笔记23:用户自定义授权管理
  2. 12.混淆——数字音频采样,混淆,反混淆,脉冲序列_2
  3. 英语中正式和休闲的打招呼_6
  4. 微型计算机中外储存器比内储存器,计算机笔试复习题集共23页.doc
  5. 全国计算机考试一级在线模拟,2017全国计算机一级考试模拟
  6. 2017.5.9 寻找道路 思考记录
  7. 小学阅读方法六种_小学数学速算六种方法
  8. fwrite函数Matlab,fread和fwrite函数,C语言fread和fwrite函数详解
  9. sqlite 模糊匹配日期_SQLite模糊查找(like) | 学步园
  10. 加密和解码(不同加密方法:随机数,hash,出现次数)