1.获取类对象
获取类对象的方法
例子
输出
在student中加一个静态代码块
除了 Class pClass2=Student.class不会静态初始化
2.对属性进行反射操作
1.先拿到对象
2.对象的类对象来获得字段
3.通过set函数来设置字段的值
私有的(private)字段只能通过公共方法访问,如Setter、Getter,具体指下面代码的 public String getName() ,public void setName(String name) 等方法。
同理,使用反射时也不能直接访问这类字段,可以反射调用Setter、Getter,或者对private字段调用 setAccessible(true),再进行访问
3.通过构造器来制造对象
4.通过反射获取方法
例子
反射的好处
能够根据外部的配置而不需要自身的更改
当有两个业务方法的时候
当从第一个方法切换到第二个方法的时候,必须修改代码
如果使用反射加载spring.txt
代码如下
public class Test {
public static void main(String[] args) {
File springConfigFile = new File("spring1.txt");
Properties springConfig= new Properties();
try {
springConfig.load(new FileInputStream(springConfigFile));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String className = (String) springConfig.get("class");
String methodName = (String) springConfig.get("method");
//根据类名称获取类对象
Class clazz;
try {
clazz = Class.forName(className);
Method m = clazz.getMethod(methodName);
//获取构造器
Constructor c = clazz.getConstructor();
//根据构造器,实例化出对象,一开始没有new对象的话,用这种方法获得对象
Object service = c.newInstance();
//调用对象的指定方法
m.invoke(service);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//根据方法名称,获取方法对象
}
}
Properties可以用来保存属性集(类似Map, 以键值的形式保存数据,不同的是Properties都是String类型的)