import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ClassDemo {
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException {
/*
//获取class对象的3种方式
//1.类名.class
Class<Student> stuClass1 = Student.class;
//2.getClass()方法
Student student = new Student();
Class<? extends Student> stuClass2 = student.getClass();
//3. Class.forName()方法
Class<?> stuClass3 = Class.forName("com.zy.day20.Student");
stuClass1.newInstance();
*/
Class<Student> stuClass1 = Student.class;
// getName()获得类的名称,包括包名 com.zy.day20.Student
System.out.println(stuClass1.getName());
// getSimpleName()获得类的名称,不包括包名 Student
System.out.println(stuClass1.getSimpleName());
// getSuperclass()获得本类的父类的class对象 class com.zy.day20.Person
System.out.println(stuClass1.getSuperclass());
// getInterfaces()获得本类所实现的所有接口的class对象 返回 Class数组
Class[] classes = stuClass1.getInterfaces();
// getDeclaredFields()可以获取一个类的所有字段,这些成员不包括从父类所继承而来的
// getFileld方法返回的是数组元素是类内public修饰符所修饰的成员,这些成员包括从父类所继承而来的
Field[] field1 = stuClass1.getDeclaredFields();
for (Field field : field1) {
System.out.println(field.getModifiers() + "\t" + field.getName());
}
// 调用getDeclaredMethods方法输出的是自身的public、protected、private方法
Method[] method1 = stuClass1.getDeclaredMethods();
for (Method method : method1) {
System.out.println(method.getModifiers() + "\t"
+ method.getReturnType() + "\t" + method.getName());
}
// 调用getMethods方法输出的是自身的public方法和父类Object的public方法
Method[] method2 = stuClass1.getMethods();
for (Method method : method2) {
System.out.println(method.getModifiers() + "\t"
+ method.getReturnType() + "\t" + method.getName());
}
//getDeclaredConstructors()取得所有的构造函数
Constructor[] constructors = stuClass1.getDeclaredConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor.getModifiers()+"\t"+constructor.getName());
}
//取得public的构造函数
Constructor[] constructors1 = stuClass1.getConstructors();
for (Constructor constructor : constructors1) {
System.out.println(constructor.getModifiers()+"\t"+constructor.getName());
}
}
}