JavaSE之反射与注解

反射

动态机制,发生在程序运行期间的行为

java反射机制,可以实现以下功能***

  1. 在运行时判断任意一个对象所属的类

  2. 在运行时构造任意一个类的对象

  3. 在运行时判断任意一个类所具有的成员变量和方法

  4. 在运行时调用任意一个对象的方法

  5. 生成动态代理

反射源头:Class 类型对象

  1. 类名.class

  2. Class.forName(权限定名) 权限定名:包名.类名------>推荐

  3. 对象.getClass()

通过反射创建对象***

  1. Class -->newInstance() 默认调用空构造为对象初始化信息---->不推荐

  2. Constructor--->newInstance() 创建对象

    1. 获取某一类的构造器:

      1. 构造器<T> getConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类的指定公共构造函数。

      2. 构造器<?>[] getConstructors() 返回一个包含 构造器对象的数组, 构造器对象反映了此 类对象所表示的类的所有公共构造函数。

      3. 构造器<T> getDeclaredConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类或接口的指定构造函数。

      4. 构造器<?>[] getDeclaredConstructors() 返回 构造器对象的数组, 构造器对象反映由此 类对象表示的类声明的所有构造函数。

    2. 调用Constructor类提供的newInstance方法,创建对象的时候调用当前构造器初始化信息

通过反射操作成员

操作方法

  1. 获取方法

    1. getMethod(String name, 类<?>... parameterTypes) 返回 方法对象,该对象反映此 类对象表示的类或接口的指定公共成员方法。

    2. getMethods() 返回一个包含 方法对象的数组

    3. getDeclaredMethod(String name, 类<?>... parameterTypes) 返回 方法对象

    4. getDeclaredMethods() 返回一个包含 方法对象的数组

  2. 调用方法

    1. Object invoke(Object obj, Object... args) 在具有指定参数的指定对象上调用此 方法对象表示的基础方法。

操作属性

  1. 获取属性

    1. getField(String name) 返回 字段对象,该对象反映此 类对象表示的类或接口的指定公共成员字段。

    2. getFields() 返回一个包含 字段对象的数组, 字段对象反映此 类对象所表示的类或接口的所有可访问公共字段。

    3. getDeclaredField(String name) 返回 字段对象,该对象反映此 类对象表示的类或接口的指定声明字段。

    4. 字段[] getDeclaredFields() 返回 字段对象的数组, 字段对象反映由此 类对象表示的类或接口声明的所有字段。

  2. 获取属性值 Object get(Object obj) 返回指定对象上此 字段表示的字段的值。

  3. 设置属性值

    void set(Object obj, Object value) 将指定对象参数上此 字段对象表示的字段设置为指定的新值。

 

注解

作用

  1. 注释解释

  2. 标志检查

  3. 添加注解可以通过配置传递参数,运行期间通过反射获取配置的数据,在程序中使用

  4. 注解存在于class文件中,而注释不行

  5. 注解代替了配置文件存在

语法

@注解名(实参)

位置

任意位置,但需符合条件

分类

  1. jdk内置注解

    1. @override()---限定重写父类方法

    2. @Deprecated()---标记已过时的,中划线的即为过时的

    3. @SuppressWarnings()---抑制标黄的警告

    4. @FunctionalInterface()---函数式接口

  2. 元注解:注解的注解

    1. @Target()---描述注解使用范围,参数为一个数组。

    2. @Retention()---用于描述注解生命周期

    3. @Documented()---表示使用该注解元素被文档化

    4. @Inherited()---表示一个注解类型会被自动继承

  3. 自定义注解

    1. 通过@Interface定义注解类型

    2. 自定义注解默认隐式的实现java.lang.annotation.Annotation接口

    3. 并不能显示实现其他接口继承 其他父类

    4. 注解类中可以自定义属性字段

    5. 注解类属性的定义:数据类型 属性名()

    6. 字段|属性类型只能为:基本数据类型 String enum annotation 或者以上数据类型

    7. 注解类型 当只有一个字段并且名为value时,赋值可以省略value=

    8. 字段可以通过default关键字来设置默认值

  4. 参数个数划分

    1. 标记注解:没有参数

    2. 单值注解:一个参数

    3. 完整注解:多个参数

注意

如果通过反射操作注解,需要注解此注解生命周期在运行期间

posted @ 2022-03-28 17:41  hello罗先生  阅读(26)  评论(0)    收藏  举报