反射

JVM在加载类的时候,每个类的基本信息通过class类来记载。
java通过.class文件解决了平台查一下,在运行的时候,就需要更多的时间来加载类。
类的加载是动态的,所以这个过程是可以干预的,这就是java插件化的原理。
反射,JVM在运行的时候,可以获取类的所有方法和属性。这种动态获取类的信息的机制叫反射。
反射的时候调用的newinstance()是无参construct函数。
Constructor c = class1.getDeclaredConstructor();
c.setAccessible(true);
Object o = c.newInstance();
if(o instanceof ReflexDemo){
int r = ((ReflexDemo) o).getNumber();
AppLog.i(String.valueOf(r));
}

Constructor c2 = class1.getDeclaredConstructor(new Class[]{Integer.class});
c2.setAccessible(true);
Object o2 = c2.newInstance(Integer.valueOf(3));
if(o2 instanceof ReflexDemo){
int r = ((ReflexDemo) o2).getNumber();
AppLog.i(String.valueOf(r));
}

Method methods = class1.getDeclaredMethod("findName",new Class[0]);
methods.setAccessible(true);
Method也可以通过setAccessible的方式突破访问限制。

发表评论

电子邮件地址不会被公开。 必填项已用*标注