反射
类对象概念:所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法,有多少属性,有哪些普通方法
获取类对象的方式有三种
1.Class.forName
2.对象名.class
3.new 对象的构造方法().getClass
在一个JVM中,一种类,只会有一个类对象存在,所以以上三种方式取出来的类对象,都是一样的
与传统的通过new来获取对象的方式不同,反射机制,会先拿到对应类的“类对象“,然后通过类对象获取”构造器对象“再通过构造器对象创建一个对象
try{
String className="character.Hero";
//类对象
Class pClass =Class.forName(className);
//构造器
Contructor c=pClass.getConstructor();
//通过构造器进行实例化
Hero h2 =(Hero) c.newInstance();
}
反射机制 访问属性
Hero h=new Hero();
try{
Filed f1=h.getClass().getDeclaredField("name");
F1.set(h,"gydgyd")
}
getField和getDeclareFiled的区别
这两的方法都是用于获取字段 getField只能获取公共的public 包括从父类继承来的字段
getDeclareField可以获取到本类所有字段 包括私有的 但是 不用获取继承来的字段 这里只能获取到私有的 但不能访问私有字段的值 除非加上setAccessible(true)
反射机制 调用方法
通过反射机制调用一个对象的方法
{
Hero h =new Hero();
//获取这个名字叫做setName,参数类型是String的方法
Method m=h.getClass().getMethod("setName",String.class);
//对h对象调用这个方法
m.invoke(h,"gydgyd");
}
使用反射方式 首先准备一个配置文件 在test类中 首先去除类名称和方法名,然后通过反射去调用这个方法 当需要从调用第一个业务方法,切换到调用第二个业务方法的时候,不需要修改一行代码,也不需要重新编译,只需要修改配置文件,再进行运行。