反射

通过class字节码获取类信息,所以Class对象是唯一的

class外部类,接口,数组,枚举,注解,基本数据类型,void都是有Class对象的,泛型信息需要子类继承获取

//获取Class的三种方式
Class studentClass = Class.forName("Student");
<p>Class studentClass2 = Student.class;</p>
<p>Class studentClass3 = new Student().getClass();</p>
<p>//获取声明的属性
Field[] declaredFieldList = studentClass.getDeclaredFields();
for (Field field : declaredFieldList) {
System.out.println("declared Field: " + field);
}</p>
<p>//获取共有属性
Field[] fieldList = studentClass.getFields();
for (Field field : fieldList) {
System.out.println("field: " + field);
}</p>
<p>//获取所有声明的构造方法
Constructor[] declaredConstructorList = studentClass.getDeclaredConstructors();
for (Constructor constructor : declaredConstructorList) {
constructor.newInstance("");//实例化对象
System.out.println("declared Constructor: " + constructor);
}</p>
<p>//获取所有共有的构造方法
Constructor[] constructorsList = studentClass.getConstructors();
for (Constructor constructor : constructorsList) {
System.out.println("Constructor: " + constructor);
}</p>
<p>// 1.获取所有声明的函数
Method[] declaredMethodList = studentClass.getDeclaredMethods();
for (Method declaredMethod : declaredMethodList) {
System.out.println("declared Method: " + declaredMethod);
}</p>
<p>// 2.获取所有公有的函数
Method[] methodList = studentClass.getMethods();
for (Method method : methodList) {
System.out.println("method: " + method);
}</p>
<p>Student student = new Student();
//获取指定私有Method
Method method = studentClass.getDeclaredMethod("show",String.class);
<strong>method.setAccessible(true); //关闭权限检测,性能提升3倍</strong>
method.invoke(student,"我是哈哈哈");</p>
<p>