获取class对象的三种方式
//Object类的getClass()方法
class c1 = 对象名.getClass();
//类的静态属性
Class c2 = 类名.class;
//class类的静态方法
Class c3 = Class.forName("类的正名");
正名:报名+类名
Student student = new Student();
Class class1 = student.getClass();
Class class2 = Student.class;
Class class3 = Class.forName("reflect.Student");
System.out.println(class1 == class2 );
System.out.println(class1 == class3);
反射方式获取构造方法
1、获取对应类的字节码文件对象
2、根据字节码文件对象获取构造器对象
3、通过newInstance方法创建对象
Constructor<T> 构造器对象,属于java.base模块,java.lang.reflect包
getConstructor(class<?>...parameterTypes) 只会返回公共构造方法
getDeclaredConstructor(Class<?>...parameterTypes) 可获取私有构造方法
getConstructors() 返回此类(不含私有)构造方法的数组
常用方法
String getName() 返回构造方法名称
T newInstance(Object...initargs) 使用此构造方法和指定参数创建并初始化对象
Class class1 =Class.forName("reflect.Student");
Constructor conl = class1.getConstructor();
System.out.println(conl);
Constructor con2 = class1.getConstructor(String.class);
System.out.println(con2.getName());
Student student =(Student) con2.newInstance("尼古拉斯赵四");
System.out.println(student);
Constructor con3 = class1.getDeclaredConstructor(int.class);
System.out.println(con3);
System.out.println("============================");
Constructor[] cons = class1.getConstructors();
for (Constructor constructor : cons) {
System.out.println(constructor);
}
反射方法获取成员方法并使用
Method对象 方法对象,java.lang.reflect
通过Class 对象获取方法
getMethod(String name,Class<?>...parameterTypes) 返回一个Method对象,仅公共成员方法
name:方法名称 parameterTypes:方法的参数列表
getDeclaredMethod(String,Class<?>...)
返回一个Method对象,可获取私有成员方法
Method的常用方法
String getName() 返回方法名称
Object invoke(Object obj,Object...args) 在指定对象上调用此方法,参数为args