Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。

综合实例:通过字符串来创建同名的类的对象,并操作该对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.lousen.test_2;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 反射
* 通过字符串来创建同名类的对象
* */
public class FanShe {
public static void main(String[] args){
try {//根据字符串创建对象,用java反射中的Class.forName();通过调用静态方法forName或得类名对应的Class对象。
String clazzName = "School"; //School类要存在
Class clazz = Class.forName("com.lousen.test_2."+clazzName);
Object obj = clazz.newInstance();
//调用类中方法用Method——其中getMethods()方法获取类中所有方法,带参数的或得指定的方法。
Method method = clazz.getMethod("recruitStudent");
method.invoke(obj);
//调用类中属性用Field,当属性是私有的时候需要f.setAccessible(true);
Field f = clazz.getDeclaredField("address");
f.setAccessible(true);
Object o = f.get(obj);
System.out.print(o.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}