package ClassTest.ClassFieldsTest;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
/**
* FileName: ReflectDemo01
* Author: lps
* Date: 2022/4/11 18:21
* Sign:刘品水 Q:1944900433
* Field getField(String name) 返回一个 Field对象,该对象反映由该 Class对象表示的类或接口的指定公共成员字段。
* Field[] getFields() 返回一个包含 Field对象的数组, Field对象反映由该 Class对象表示的类或接口的所有可访问的公共字段。
* Field getDeclaredField(String name) 返回一个 Field对象,该对象反映由该 Class对象表示的类或接口的指定声明字段。
* Field[] getDeclaredFields() 返回一个 Field对象的数组,反映了由该 Class对象表示的类或接口声明的所有字段。
*/
public class ReflectDemo01 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class<?> c = Class.forName("ClassTest.ClassTest01.Student");
Field[] fields = c.getFields();
for (Field field:fields){
System.out.println(field);
}
System.out.println("==========");
Field[] declaredFields = c.getDeclaredFields();
for (Field field:declaredFields){
System.out.println(field);
}
System.out.println("=============");
Field adressfield = c.getField("adress");
//获取无参构造方法创建对象
Constructor<?> con = c.getConstructor();
Object obj = con.newInstance();
//Field提供有关类或接口的单个字段的信息和动态访问
//void set(Object obj, Object value) 将指定的对象参数中由此 Field对象表示的字段设置为指定的新值。
adressfield.set(obj,"南京");//给obj的成员变量adressfield赋值为南京
System.out.println(obj);
}
}
package ClassTest.ClassTest01;
/**
* FileName: Student
* Author: lps
* Date: 2022/4/11 15:22
* Sign:刘品水 Q:1944900433
*/
public class Student {
private String name;
int age;
public String adress;
public Student() {
}
private Student(String name) {
this.name = name;
}
Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(String name, int age, String adress) {
this.name = name;
this.age = age;
this.adress = adress;
}
private void function(){
System.out.println("function");
}
public void method1(){
System.out.println("method");
}
public void method2(String s){
System.out.println("method:"+s);
}
public String method3(String s, int i){
return s+","+i;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", adress='" + adress + '\'' +
'}';
}
}
![]()