拿到字节码文件,拿到它就是为了用他的成员。
constructor
Class c = Class.forName();
Constructor[] cons=c.getConstructors();
for(Constructor con :cons){
syso(con)
}
getDecaredConstructors()得到所有的构造方法。
Constructor con= c.getConstructor()..可变参数,参数是class类型的
Object obj = con.getInstance();//通过构造器创建一个实例,通过构造方法创建一个实例
System.out.println(obj);输出的时候默认调用obj的toString方法
相当于
Person p = new Person();
System.out.println(p);
反射是不会让你看到任何类的信息的,forName里会做到配置文件。
配置的谁就会运行谁。
需求:通过反射获取该构造方法使用
Person p = new Person("xiao",23,"北京");
System.out.print(p);
//--------------
通过反射获取私有构造方法并使用,在java中私有的不可以被外界访问,但是反射可以访问私有的构造方法
private Person(String name){}
Person s = new Person("风清扬");
//暴力访问
con.setAccessible(true);
getDeclaredConstructor();
以前java可以包装,现在都可以访问。
需求:通过反射获取成员变量并使用
Class c = Class.forName();
Field[] fields = c.getFields();
只能获取公共的成员变量。
getDeclaredFields();
for(Field f :fields){}
Person p = new Person();
p.address = "北京";
syso(o);
Class c = Class.forName();
Field ff = c.getField("address");