以下代码可以初步的了解反射
package com.lbx.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import com.lbx.model.Person;
public class TestReflection {
/**
* 测试获取Class对象
*/
public static void testgetClassObject(){
//通过getClass来获得
Person p = new Person("李斌选");
Class c = p.getClass();
System.out.println(c.getName());
//使用类名.class来获得
Class c2 = Person.class;
System.out.println(c2.getPackage());
//使用Class.forName来获得
try {
Class c3 = Class.forName("com.lbx.model.Person");
System.out.println(c3.getSimpleName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 测试属性操作
*/
public static void testField(){
try {
Class c = Class.forName("com.lbx.model.Person");
Field[] fs = c.getFields();
for (int i = 0; i < fs.length; i++) {
Field field = fs[i];
System.out.println("属性类型:"+field.getType().getName()); //属性是公有才行。
//得到某个对象指定属性的值
Field f = c.getField("name");
System.out.println(f.get(new Person("李斌选")));
//得到类的静态属性
Field f2= c.getField("age");
System.out.println("类的静态属性值:"+f2.get(c));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 测试执行对象或类的方法
*/
private static void testMethod(){
try {
Class c = Class.forName("com.lbx.model.Person");
Method[] ms = c.getMethods();
for (int i = 0; i < ms.length; i++) {
Method method = ms[i];
System.out.println(method.getName());
}
//对象方法的调用
Person p = new Person("李斌选");
Method m = c.getMethod("test1",null);
m.invoke(p, null);
//有参数传入的方法的调用!
Method m2 = c.getMethod("test2",int.class,String.class);
m2.invoke(p,22,"aaa");
//类的静态方法调用
Method m3 = c.getMethod("test3", null);
m3.invoke(null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 测试构造新的对象
*/
private static void testConstructor(){
try {
Class c = Class.forName("com.lbx.model.Person");
Constructor con = c.getConstructor();
Person p = (Person) con.newInstance();
p.setName("ddd");
System.out.println(p.getName());
Constructor con2 = c.getConstructor(String.class);
Person p2 = (Person) con2.newInstance("eee");
System.out.println(p2.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 测试某个对象是否为某个类的对象
*/
private static void testIsInstance(){
Person p = new Person();
Class c = TestReflection.class;
Class c2 = Person.class;
System.out.println(c.isInstance(p));
System.out.println(c2.isInstance(p));
}
public static void main(String[] args) {
testgetClassObject();
testField();
testMethod();
testConstructor();
testIsInstance();
}
}