一、获取成员变量(Reflect.java)
1.获取字节码对象
2.获取成员变量
3.给获取的成员变量赋值
(1).通过无参构造方法创建对象
(2).public void set(Object obj,Object value);
package com.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
public class ReflectTest {
public static void main(String[] args) throws Exception {
//获取字节码对象
Class c = Class.forName("com.test.Student");
//获取所有的成员变量
//Field[] fields = c.getFields();
Field[] fields = c.getDeclaredFields();
for(Field field : fields){
System.out.println(field);
}
//通过无参构造方法创建对象
Constructor con = c.getConstructor();//获取构造方法
Object obj = con.newInstance();//调用构造方法
//获取单个的成员变量
Field ageField = c.getField("age");//获取某个共有的
//给obj对象的ageField字段设置值为19
ageField.set(obj,19);
System.out.println(obj);
Field numField = c.getField("num");
numField.set(obj,3);
System.out.println(obj);
Field nameField = c.getDeclaredField("name");//获取某个私有的
nameField.setAccessible(true);//暴力访问
nameField.set(obj,"张三");
System.out.println(obj);
}
}
Student.java
package com.test;
public class Student {
private String name;
public int age;
public int num ;
private Student(String name, int age, int num) {
this.name = name;
this.age = age;
this.num = num;
}
public Student() {}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void show(){
System.out.println("show");
}
@Override
public String toString() {
return name+"--"+age+"--"+num;
}
}
二、获取无参成员方法(ReflectFangFa.java)
1.获取字节码对象
2.获取成员方法
3.获取方法并使用
(1).获取构造方法,并创建对象
(2).获取单个方法并使用
package com.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ReflectFangFa {
public static void main(String[] args) throws Exception {
//获取字节码对象
Class c = Class.forName("com.test.Student");
//获取成员方法
//Method[] methods = c.getMethods();//获取自己的包括父亲的公共方法
Method[] methods = c.getDeclaredMethods();
for(Method method : methods){
System.out.println(method);
}
//获取构造方法
Constructor con = c.getConstructor();
Object obj = c.newInstance();
//获取单个方法并使用
Method method = c.getMethod("show");
method.invoke(obj);
}
}