1.三种方式 Class获取对象
1:(最好用) 使用类的 cLassClass属性来获取该类对应的对象举例: Student.class将会返回类对应的对象
Class<Student> c = Student.class;
2:调用对象的getclass()方法,返回该对象所属类对应的 class对象
该方法是 object类中的方法,所有的ava对象都可以调用该方法
Class<Student> s = new Student();
Class<? extends Studnent> c = s.getClass();
3:(灵活性最高) 使用Cass类中的静 forName态方法( String clossName),该方法需要传入字符串参数,该字符串参数的值是某个类的全路径
Class<?> c = Class.forName("com.Student");
2.反射获取构造方法
(1)Class类中用于获取构造方法的方法
Constructor<?>[]getConstructors()
:
返回所有公共构造方法对象的数组
Constructor<?>[] getDeclaredConstructors()
:
返回所有构造方法对象的数组
Constructor<T> getConstructor(Class<?>... parameterTypes)
:
返回单个公共构造方法对象
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
:
返回单个构造方法对象
(2)Constructor类中用于创建对象的方法
T newInstance(Object.. initargs)
:
根据指定的构造方法创建对象
暴力反射(初始化私有对象):con.setAccessible(true)
注:参数为要获取的构造方法的参数的个数和数据类型对应的字节码文件对象
原理:
1> 把字符串路径传到 forName() 方法中,然后获取到其字节码文件c,
Class<?> c = Class.forName("com.Student");
2> 通过c得到单个的构造方法对象con,
Constructdr<?> con = c.getConstructor(Class<?>... parameterTypes);
3> 然后构造方法对象的newInstance() 方法创建对象
Object obj = con.newInstance(Object... initargs);
例: Constructdr<?> con = c.getConstructor(String.class, int.class);
//Constructor<T> getConstructor (Class<?>... parameterTypes)
注:传入Class类型为class字节码型,基本数据类型也可以通过 .class得到对应的Class类型
3.反射获取成员变量并使用