Java反射机制

Reflection概念

java运行时对于任意的一个类,都可以通过某个方式获取这个类的属性/方法、调用属性/方法,这个动态的方式被称作反射机制(Reflection).

实现Reflection则必须获取Class类对象!

Class对象

Class的构造方法为private,只允许私有调用,即被JVM调用。JVM运行时,每个类都有对应的Class对象,因为在编译后生成.class文件,Class对象由JVM加载进内存。

  • Class构造方法
private Class(ClassLoader loader) {
        // Initialize final field for classLoader.  The initialization value of non-null
        // prevents future JIT optimizations from assuming this final field is null.
        classLoader = loader;
    }

获取类对象

  • 被反射对象Model
public class Model {
    private String name;

    public Model(){}

    public Model(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

  • Way 1
//获取类对象方式1
    public void getClassWay1() {
        Model model = new Model();
        //通过对象调用getClass方法获取类对象
        Class<? extends Model> clazz = model.getClass();
    }
  • Way 2
//获取类对象方式2
    public void getClassWay2() throws ClassNotFoundException {
        Class<?> clazz = Class.forName("testtest.Reflection.Model");
    }
  • Way 3
//获取类对象方式3
    public void getClassWay3() {
        Class<? extends Model> clazz = Model.class;
    }

创建类的对象时,JVM会检测该类型的Class对象是否已经加载,If not,JVM根据类名找到.class文件并加载进内存。加载后就可以用它来创建对象了。

获取了Class对象后,即可通过Class对象调用API获取或调用该类拥有的属性或方法。


如有错误请私信笔者

posted @ 2020-08-31 10:31  Faink  阅读(126)  评论(0)    收藏  举报