Class 类是java 中的一个很奇怪的类。
每当JVM创建一个对象时,它也创建一个java.lang.Class对象,用来描述这个对象的类型。
写了一个例子
package com.zjh.example;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MyClassTest {
public static void main(String[] args) {
Class jdbcConnect;
Test instance;
String classPath;
try {
classPath = "com.zjh.example.Test";
// 获得Test类对应的Class类
jdbcConnect = Class.forName(classPath);
// 用jdbcConnect生成Test类的实例
instance = (Test) jdbcConnect.newInstance();
// 通过发射生成Test的test方法
Method test = jdbcConnect.getMethod("test",
"this is a test".getClass());
// 调用Test的test方法
test.invoke(instance, "this is a test");
// 获得Test类的字段
Field[] fields= jdbcConnect.getDeclaredFields();
for(Field field: fields){
System.out.println(field);
}
System.out.println(test.getReturnType());
System.out.println(instance);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Test {
private static String className;
private static int num;
public Test() {
className = "Default";
num = 1;
}
public void test(String str) {
System.out.println(str);
}
}
运行结果如下: