您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
08_反射_Class对象功能_获取Field
发布时间:2022-07-03 15:15:25编辑:雪饮阅读()
首先定义一个用来通过反射操作的Person类:
package day1.reflection;
public class Person {
//按权限修饰符顺序权限大小分别定义几个变量
public String a;
protected String b;
//缺省修饰是仅仅在本包和本类,其子类都不支持
String c;
private String d;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name) {
this.name = name;
}
public Person() {
}
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;
}
}
然后反射操作的各个功能示例:
package day1.reflection;
import java.lang.reflect.Field;
public class index {
public static void main(String[] args) throws Exception{
//获取指定类中所有public修饰的成员(这里发现有成员函数是public也获取不到)
Field[] fields=Person.class.getFields();
for (Field field:fields){
System.out.println(field);
}
System.out.println("------------------------------");
//根据成员名称来获取指定成员,同样也是要public修饰的
Field fielda=Person.class.getField("a");
System.out.println(fielda);
System.out.println("------------------------------");
//获取某个成员变量在某个实例化中的值
Person p1=new Person();
String fieldav= (String) fielda.get(p1);
System.out.println(fieldav);
System.out.println("------------------------------");
//设置某个成员变量在某个实例化中的值
fielda.set(p1,"aaa");
System.out.println(fielda.get(p1));
System.out.println("------------------------------");
//获取所有成员变量,不考虑权限修饰符
Field[] fields2=Person.class.getDeclaredFields();
for (Field field2:fields2){
System.out.println(field2);
}
System.out.println("------------------------------");
//获取某单个私有成员变量的值
Field private_single_field=Person.class.getDeclaredField("age");
//获取私有成员变量需要忽略权限修饰符的权限检查,这样操作被称为暴力反射
private_single_field.setAccessible(true);
int age= (int) private_single_field.get(new Person());
System.out.println(age);
}
}
关键字词:java,反射