JavaSE之反射与注解
动态机制,发生在程序运行期间的行为
java反射机制,可以实现以下功能***
-
在运行时判断任意一个对象所属的类
-
在运行时构造任意一个类的对象
-
在运行时判断任意一个类所具有的成员变量和方法
-
在运行时调用任意一个对象的方法
-
生成动态代理
反射源头:Class 类型对象
-
类名.class
-
Class.forName(权限定名) 权限定名:包名.类名------>推荐
-
通过反射创建对象***
-
Class -->newInstance() 默认调用空构造为对象初始化信息---->不推荐
-
Constructor--->newInstance() 创建对象
-
获取某一类的构造器:
-
构造器<T> getConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类的指定公共构造函数。
-
构造器<?>[] getConstructors() 返回一个包含 构造器对象的数组, 构造器对象反映了此 类对象所表示的类的所有公共构造函数。
-
构造器<T> getDeclaredConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类或接口的指定构造函数。
-
构造器<?>[] getDeclaredConstructors() 返回 构造器对象的数组, 构造器对象反映由此 类对象表示的类声明的所有构造函数。
-
-
调用Constructor类提供的newInstance方法,创建对象的时候调用当前构造器初始化信息
-
通过反射操作成员
操作方法
-
获取方法
-
getMethod(String name, 类<?>... parameterTypes) 返回 方法对象,该对象反映此 类对象表示的类或接口的指定公共成员方法。
-
getMethods() 返回一个包含 方法对象的数组
-
getDeclaredMethod(String name, 类<?>... parameterTypes) 返回 方法对象
-
getDeclaredMethods() 返回一个包含 方法对象的数组
-
-
调用方法
-
Object invoke(Object obj, Object... args) 在具有指定参数的指定对象上调用此 方法对象表示的基础方法。
-
操作属性
-
获取属性
-
getField(String name) 返回 字段对象,该对象反映此 类对象表示的类或接口的指定公共成员字段。
-
getFields() 返回一个包含 字段对象的数组, 字段对象反映此 类对象所表示的类或接口的所有可访问公共字段。
-
getDeclaredField(String name) 返回 字段对象,该对象反映此 类对象表示的类或接口的指定声明字段。
-
字段[] getDeclaredFields() 返回 字段对象的数组, 字段对象反映由此 类对象表示的类或接口声明的所有字段。
-
-
获取属性值 Object get(Object obj) 返回指定对象上此 字段表示的字段的值。
-
设置属性值
void set(Object obj, Object value) 将指定对象参数上此 字段对象表示的字段设置为指定的新值。
注解
作用
-
注释解释
-
标志检查
-
添加注解可以通过配置传递参数,运行期间通过反射获取配置的数据,在程序中使用
-
注解存在于class文件中,而注释不行
-
注解代替了配置文件存在
语法
@注解名(实参)
位置
任意位置,但需符合条件
分类
-
jdk内置注解
-
@override()---限定重写父类方法
-
@Deprecated()---标记已过时的,中划线的即为过时的
-
@SuppressWarnings()---抑制标黄的警告
-
@FunctionalInterface()---函数式接口
-
-
元注解:注解的注解
-
@Target()---描述注解使用范围,参数为一个数组。
-
@Retention()---用于描述注解生命周期
-
@Documented()---表示使用该注解元素被文档化
-
@Inherited()---表示一个注解类型会被自动继承
-
-
自定义注解
-
通过@Interface定义注解类型
-
自定义注解默认隐式的实现java.lang.annotation.Annotation接口
-
并不能显示实现其他接口继承 其他父类
-
注解类中可以自定义属性字段
-
注解类属性的定义:数据类型 属性名()
-
字段|属性类型只能为:基本数据类型 String enum annotation 或者以上数据类型
-
注解类型 当只有一个字段并且名为value时,赋值可以省略value=
-
字段可以通过default关键字来设置默认值
-
-
参数个数划分
-
标记注解:没有参数
-
单值注解:一个参数
-
完整注解:多个参数
-
注意