反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法。
Class类:
成员变量 Field
构造方法 Constructor
成员方法 Method
获取class文件对象的方式:
A.Object类的getClass()方法
B.数据类型的静态属性class
C.Class类中的静态方法
public static Class forName(String className)//全路径
代码如下:
class ReflectDemo{
public static void main(String[] args) {
Person p = new Person();
Class c = p.getClass();
Person p1 = new Person();
Class c1 = p1.getClass();
System.out.println(p==p1);//false
System.out.println(c==c1);//true
}
}
class Person {
private String name;
int age;
public String address;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public void show() {
System.out.println("show");
}
public void method(String s) {
System.out.println("method" + s);
}
public String getString(String s, int i) {
return s + "-----" + i;
}
private void function(){
System.out.println("function");
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
通过反射获取构造方法并使用
获取构造方法
getConstructors
getDeclaredConstructors
创建对象
newInstance()
con.newInstance(“zhangsan", 20);
通过反射获取成员变量并使用
获取所有成员
getFields,getDeclaredFields
获取单个成员
getField,getDeclaredField
修改成员的值
set(Object obj,Object value)
将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
通过反射获取成员方法并使用
获取所有方法
getMethods
getDeclaredMethods
获取单个方法
getMethod
getDeclaredMethod
暴力访问
method.setAccessible(true);