1.反射概述:
java反射机制是在运行工程中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能调用它的任意一个方法和属性。想要解剖一个类,要先获取到字节码文件。
2.三种获取class对象的方法(在运行中只有一个class对象产生):
//方法一:这种方法要用异常处理,通过class的路径获取,如果有package要注意是package.classname
try{
Class<?> c = Class.forName("Student");
System.out.println(c);
}catch(Exception e){
e.printStackTrace();
}
//方法二:通过一个类的对象获取class对象
Student s = new Student();
Class<?> ss = s.getClass();
System.out.println(ss);
//方法三:直接通过class获取class对象
Class<?> cla = Student.class;
System.out.println(cla);
总结:要明确我们是通过反射获得到类名然后创建该类的对象的,因此以上三种方法主要用方法一,通过传字符串参数获取到class的路径来获取class;方法二:对象都存在了。方法三:此方法需要导入类的包,依赖太强,容易抛出编译错误;
3.
1>获取构造方法:
1):批量的方法:public Constructor[] getConstructors();获取所有”公有的“构造方法
public Constructor[] getDeclaredConstructors();获取所有的构造方法
2):获取单个的构造方法:public Constructor getConstructor(Class... parameterTypes);获取单个“公有的”构造方法
public Constructor getDeclaredStructors(Class...parameterTypes)获取单个构造方法可以使”私有...“
调用构造方法:Constructor-->newInstance(Object...initargs)
2>newInstance是Constructor类的方法(管理构造函数的类)