JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
先建立一个类,有四种属性:
private int id;
private String name;
private byte by;
private short st;
以下方法,创建一个对象,然后打印该对象的属性名字,属性值,和属性的类型:
public class T {
public static void main(String[] args) throws Exception {
User u = new User();
u.setId(1);
u.setName("cc");
u.setBy((byte)1);
u.setSt((short)2);
getProperty(u);
}
/**
* 获得一个对象各个属性的字节流
*/
@SuppressWarnings("unchecked")
public static void getProperty(Object entityName) throws Exception {
Class c = entityName.getClass();
Field field[] = c.getDeclaredFields();
for (Field f : field) {
Object v = invokeMethod(entityName, f.getName(), null);
System.out.println(f.getName() + "\t" + v + "\t" + f.getType());
}
}
/**
* 获得对象属性的值
*/
@SuppressWarnings("unchecked")
private static Object invokeMethod(Object owner, String methodName,
Object[] args) throws Exception {
Class ownerClass = owner.getClass();
methodName = methodName.substring(0, 1).toUpperCase()
+ methodName.substring(1);
Method method = null;
try {
method = ownerClass.getMethod("get" + methodName);
} catch (SecurityException e) {
} catch (NoSuchMethodException e) {
return " can't find 'get" + methodName + "' method";
}
return method.invoke(owner);
}
}
打印结果如下:
id 1 int
name cc class java.lang.String
by 1 byte
st 2 short
通过这些内容,可以在系统中写一些公共的解析方法