运行时类的完整结构
- 通过反射获取运行时类的完整结构
 Fidel(字段),Method(方法),Constructor(构造器),Superclass(父类),Interface(接口),Annotation(注解)
public static void main(String[] args) throws Exception {
    Class c1 = Class.forName("com.saxon.reflection.Person");
    //获得类的名字
    System.out.println(c1.getName());//全名:包名+类名
    System.out.println(c1.getSimpleName());//类名
    Field[] declaredFields = c1.getDeclaredFields();//获得全部属性
    for (Field declaredField : declaredFields) {
        System.out.println(declaredField);
    }
    System.out.println("================================");
    //获得指定属性的值
    Field name = c1.getDeclaredField("name");//可以获得所有的属性
    System.out.println(name);
    Method[] methods = c1.getMethods();//本类及其父类的全部public方法
    for (Method method : methods) {
        System.out.println(method);
    }
    System.out.println("===================================");
    Method[] declaredMethods = c1.getDeclaredMethods();//本类的所有方法
    for (Field declaredField : declaredFields) {
        System.out.println(declaredField);
    }
    System.out.println("=============================");
    //获取指定的方法
    Method getName = c1.getMethod("getName", null);
    Method getName1 = c1.getDeclaredMethod("setName", String.class);
    System.out.println(getName);
    System.out.println(getName1);
    System.out.println("==============================");
    //获取指定的构造器
    Constructor[] constructors = c1.getConstructors();
    for (Constructor con : constructors) {
        System.out.println(con);
    }
    System.out.println("==============================");
    Constructor[] declaredConstructors = c1.getDeclaredConstructors();
    for (Constructor declaredConstructor : declaredConstructors) {
        System.out.println(declaredConstructor);
    }
    //获得指定的构造器并打印
    System.out.println(c1.getDeclaredConstructor(String.class, int.class, int.class));
}
- 
小结
- 在实际的操作中,取得类的信息的操作代码,并不会经常开发。
- 一定要熟悉java.lang.reflect包的作用,反射机制。
- 如何取得类的属性,方法,构造器的名称,修饰符等。