注解和反射
Posted zwcnblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注解和反射相关的知识,希望对你有一定的参考价值。
一、注解
英文:Annotation
1.1 注解的概念
注解也叫元数据,用来标记代码,描述数据,是有特殊意义的。
1.2 注解作用
1、Javadoc将文档注释生成api文档时,会将一些注解内容生成到Api文档中,如 @return @see @param
2、编译时进行格式检查,如@Override
3、使用注解,减少配置文件,如框架中。
4、抑制警告
1.3 四个内置注解
就是java写好的注解,直接用。
@Override:标记重写方法
@Deprecated:标记方法已过时,但是也可以用
@SuppressWarnings():抑制编译器警告,可以抑制字节结构体范围内“{ }” 的警告,如eclipse中的黄线
@SafeVarargs:抑制堆污染警告(单独警告),如可变参数和泛型同时使用情况
1.4 四个元注解
在定义注解时,用于注解注解的注解
@Target:被标记的注解可以注解的位置
ElementType是枚举类型,位置有:
TYPE : 类型
FIELD : 字段
METHOD : 普通方法
PARAMETER : 参数
CONSTRUCTOR : 可以标记构造方法
LOCAL_VARIABLE : 局部变量
ANNOTATION_TYPE :可以标记在注解上面
PACKAGE :包
TYPE_PARAMETER 形式参数类型
TYPE_USE :哪里都可以标记
@Retention:被标记的注解存在的生命周期
RetentionPolicy是枚举类型,生命周期有:
SOURCE: java源码.java文件中可以存在
CLASS :编译之后的字节码文件中可以存在
RUNTIME :运行时编译成字节码了,放入到jvm中了,这个注解还在
@Documented:被标记的注解生成文档时是否生成在文档中
@Inherited:被标记的注解在类继承中是否被继承
1.5 自定义注解
在以后的实际开发中,我们基本上不会自定义注解,都是用别人定义好的。我们自 定义的注解,如果没有第三方程序(使用反射技术)的支持,是没有任何意义的。
二、反射
英文:Reflect
2.1 面向对象再次理解
Java语言设计时,就是想将生活中的对象与对象之间的关系在计算机中体现,万事万物皆对象,而对象又可以分类即是类,类是描述对象的一个抽象模板,在编程时我们主要目的就是为了操作数据即是操作对象,数据类型即描述对象的就是类。
2.2 反射的概念
Java提供的一项技术,在运行时期动态的获得一个类的属性,方法,构造方法等,并且也可以修改这些东西(私有的也能获得)。Class类就是描述类的类型,一个类只有一个类类型。
2.3 获取字节码对象
对象.getClass();
类名.Class;
Class.forName(“类的全限定名”);
2.4 各种数据类型获得字节码对象
基本数据类型
引用数据类型
接口
枚举
数组
void
注意:1、基本数据类型的字节码对象也可以通过包装类型.TYPE获取
2、void的字节码也可以通过Void. TYPE获取
2.5 获得构造器
Constructor<T> getConstructor(Class<?>... parameterTypes) :获得指定公共构造器
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) :获得构造器(可是私有)
Constructor<?>[] getConstructors() :获得所有公共构造器
Constructor<?>[] getDeclaredConstructors() :获得所有构造器(包括私有)
2.6使用构造器创建对象
2.7使用反射技术写注解描述注入对象
思路:通过反射获取到字段和注解,通过注解值获取注入对象,将对象设置在字段中。
以上是关于注解和反射的主要内容,如果未能解决你的问题,请参考以下文章