一、獲取成員變量(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);
}
}