Java - 反射相关

 

1. 简介

  万事万物皆对象, 类也是对象, 可以通过反射创建类对象和使用类对象

  反射的作用: 创建类的对象

  特点: 实现了java对象的动态创建

  传统方式创建对象:

    new 类名(); 这种方式创建对象必须预先知道要使用的类, 如果要修改使用的类, 必须要修改源码

 

2. 获取类对象 (反射获取类对象的三种方式)

  1. Class.forName("类的全限定路径"); // 根据全限定路径获取  

  2. 对象名.getClass(); // 根据对象获取

  3. 类名.class; // 根据类名获取

  类对象常用的方法: 

    getPackage(); // 获取类对象的包名

    getModifiers(); // 获取类的修饰符,返回的是int值

    getName(); // 获取类的名称(全限定)

    getSimpleName(); // 获取类的名称(类名)

    getSuperclass(); // 获取类的父类的类对象

    newInstence(); // 实例化一个对象

 

3. 反射获取类对象的属性

  类对象.getFields(); 获取所有公共字段(包括父类)

  类对象.getDeclaredFields(); 获取所有声明的字段(不包括父类)

  类对象.getField(String name); 获取指定的公共字段(包括父类) 

  类对象.getDeclaredField(String name); 获取指定的声明的字段(不包括父类)

  类属性对象.getName(); 获取属性名

  类属性对象.getModifiers(); 获取修饰符

  类属性对象.getType(); 获取类型, 返回的是类型的Class对象

  类属性对象.setAccessible(true); 暴力反射, 可以操作私有化属性

  

  操作静态属性: 

    类属性对象.get(null); 返回静态属性的值

    类属性对象.set(null, "值"); 赋值

  操作非静态属性: 

    类属性对象.get(Object obj); 返回参数对象中该属性的值

    类属性对象.set(Object obj, "值"); 给参数对象中该属性赋值

 

4. 反射获取类对象的方法

  获取类对象的方法与获取类对象的属性的写法相似

  执行方法

    类方法对象.invoke(Object obj, Class ... clazz); 执行方法

    第一个参数表示要执行哪个对象的方法, 后面可变参数写要执行的方法的参数类型的类对象

    如果执行的是静态方法, 第一个参数为 null

 

posted @ 2020-03-04 15:16  萌胖次  阅读(102)  评论(0)    收藏  举报