第一种:forName("知道字符串")
第二种:知道它的对象,但不知道它的对象是什么
第三种:在知道是某个类的情况下直接Person.class这里以Person这个类作为试例
越往上知道的越模糊。
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Test01 {
public static void main(String[] args) throws ClassNotFoundException {
//Person person = new Person();
// test(person);
// 第一种
// Class<?> clazz = Class.forName("java.lang.String");
// 第二种
// test(new Integer(0)))
// 第三种
test()
}
// 第二种
public static void test(Object obj) {
/* Class在这虽然不知道它的泛型是什么,但是我知道是继承于它的子类
*也能获得一个类的类对象
* */
// 第三种
// Class<? extends Object> cl = Person.class;
Class<? extends Object> cl = obj.getClass();
Method[] methods = cl.getDeclaredMethods();
for (Method m : methods) {
System.out.println(m);
}
System.out.println("---------------");
Constructor<?>[] constructors = cl.getConstructors();
for (Constructor c : constructors) {
System.out.println(c);
}
System.out.println("---------------------------");
Field[] fields = cl.getDeclaredFields();
for (Field f : fields) {
System.out.println(f);
}
}
}
Person类