java注解和反射(Annotation and Reflect)
摘要:
注解和反射是相互联系的知识,所以应该放到一起来说。
注解:JDK5之后才有的技术,为了增加对元数据的支持,可以将注解理解为代码中的特殊标记,一种修饰。而这些标记是可以在代码编译,类的加载,和运行中被读取并进行相应的操作的一系列数据。
它提供了一种类似于注释的东西,但是是面向于计算机程序的。用来将任何的元数据(metadata)与程序元素()进行联系。为程序的元素()加上了更直观的说明,这些说明信息与程序的业务逻辑无关, 起到一个说明,配置的作用。注释包含在java.lang.annotation中
注解:给计算机看的 注释:给程序员看的
反射:简单来说,反射就是在运行时获取任意的class和Object成员属性,如成员变量,成员方法,构造函数和Annotation。
正文:
注解(Annotation):
*定义:注解(Annotation),也叫做元数据,一种代码级别的说明,是在JDK1.5之后引入的,与类,接口,枚举都在一个层次。主要声明在包、类、字段、方法、局部变量等前面对这些变量进行说明,注释。
*如何使用:@注解名称
*作用:1、编码文档:通过代码标识的注解可以生成doc文档(doc文档)
2、代码分析:使用代码中标识的注解对代码进行分析(使用反射的方法)
3、编译检查:使用代码中标识的注解对在编译时可以进行基本的编译检查(例如@Override)
分类: JDK中预定的一些注解 自定义的注解 在程序中使用解析注解
java预定注解:
1、Override注解:在类继承时候看这个类在父类中是否存在,确保子类确实重写了父类的方法
2、Deprecated注解:已经过时的一些注解
3、SuppressWarning:被这个注解标识的元素以及元素的属性和方法都会被取消编译器警告
自定义注解:
**格式:
元注解
public @interface 注解名称{}
**本质:注解本质就是一个接口,该接口继承与annotation接口
*public interface myanno extends java.lang.annotation.Annotation{} (这是对一个myanno注解进行javap反编译之后形成的东西)
**属性:接口中的抽象方法(因为注解本身就是一个接口,既然和接口一样,那注解中也可以进行定义方法)
*要求:属性的返回值类型
1、四种基本类型 2、String 3、枚举 4、注解 5、以上类型的数组
定义了属性,需要时候 给属性赋值:
**元注解:描述注解的注解
@target: 描述注解作用的位置
@retention:注解作用的阶段(java的三个阶段,源代码阶段、class阶段、run阶段)
*@Rentention(RententionPolicy.RUNTIME):当前注解被描述,会被保留到class文档中,并且在JVM中进行执行
@Documented:是否能被javadoc提取为doc文档
@Inheirted: 这个注解是否能被子类进行提取
在程序中使用(解析)注解:获取注解中定义的属性值
按照周期分: 代码编辑时候注解 运行时注解 编译时注解(java的代码编辑有三个周期:a、代码编辑(sourec) b、编译成.class文件 (class) c、放到JMV里面进行运行(runtime))而注解也正好对应而了这三个阶段
最新文章
- EF 增删改
- <;二>;JDBC_通过ResultSet执行查询操作
- powershell小工具
- HTTP报文
- javascript jquery 常用方法
- 基因探针富集分析(GSEA)&; GO &; pathway
- TCP协议解析
- window 安装redis、memcache的php扩展和 reidis 、memcache 及 reids管理软件
- 分布式监控系统开发【day38】:报警策略队列处理(五)
- java Arrays常用方法
- 利用ajax与input 上传与下载文件
- [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口
- Windows 下自动同步文件夹内容到另一个文件夹下
- BZOJ.4241.历史研究(回滚莫队 分块)
- Retrieve id of record just inserted into a Java DB (Derby) database
- anaconda查看删除增加镜像源
- PostgreSQL流复制
- jmeter java请求:java.lang.VerifyError: Cannot inherit from final class
- html 简单学习
- python caser运行编码
热门文章
- rest-assured:JUnit5中接口测试参数化的支持之利用EnumSource检查用户消息是否包含特定字段(JSON path $ doesn&#39;t match.)
- 当前工程中typescritpt依赖包与依赖包中依赖包类型不一致如何解决
- Grafana + Prometheus 监控 Zookeeper
- Vue 解决因网络延时 页面中的{{XXX}}模板直接展示在用户面前,配合v-cloak指令
- stream-分组两次
- css实现文字多余显示省略号
- 2022-04-13内部群每日三题-清辉PMP
- Jenkins多节点python环境隔离(Windows)
- 1.JavaScript的实现与由来
- Leetcode48 旋转图像