Class对象功能概述以及获取Field方法
Class对象功能概述
获取功能:
1.获取成员变量们
Field[] getFields()
Field getField(String name)
Field[] getDeclaredFields()
Field getDeclaredField(String name)
2.获取构造方法们
Constructor<?>[] getConstructors()
Constructor<T> getConstructor(类<?>… parameterTypes)
Constructor<T> getDeclaredConstructor(类<?>… parameterTypes)
Constructor<?>[] getDeclaredConstructors()
3.获取成员方法们
Method[] getMethods()
Method getMethod(String name,类<?>…parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name,类<?>… parameterTypes)
4.获取类名
String getName()
Class对象功能_获取Field
Field[] getFields() :获取所有public修饰的成员变量
Field getField(String name):获取指定名称的public修饰的成员变量
Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name):获取指定名称的修饰的成员变量,不考虑修饰符
操作:
设置值:
void set(Object obj,Object value)
获取值:
get(Object obj)
忽略访问权限修饰符的安全检查:
setAccessible(true):暴力反射
public class Person { private String name; private int age; public String a; protected String b; String c; private String d; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", a='" + a + '\'' + ", b='" + b + '\'' + ", c='" + c + '\'' + ", d='" + d + '\'' + '}'; } 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 Person() { } public Person(String name, int age) { this.name = name; this.age = age; } }
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { //1.获取Person类的Class对象 Class personClass = Person.class; /* Field[] getFields() :获取所有public修饰的成员变量 Field getField(String name):获取指定名称的public修饰的成员变量 Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符 Field getDeclaredField(String name):获取指定名称的修饰的成员变量,不考虑修饰符 */ //1.Field[] getFields() :获取所有public修饰的成员变量 Field[] fields = personClass.getFields(); for (Field field : fields) { System.out.println(field); } System.out.println("---------"); //2.Field getField(String name):获取指定名称的public修饰的成员变量 Field a = personClass.getField("a"); //获取成员变量a的值 Person p = new Person(); Object value = a.get(p); System.out.println(value); //设置a的值 a.set(p,"张三"); System.out.println(p); System.out.println("==============="); //Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符 Field[] declaredFields = personClass.getDeclaredFields(); for (Field declaredField : declaredFields) { System.out.println(declaredField); } //Field getDeclaredField(String name):获取指定名称的修饰的成员变量,不考虑修饰符 Field d = personClass.getDeclaredField("d"); //忽略访问权限修饰符的安全检查 d.setAccessible(true);//暴力反射 Object value2 = d.get(p); System.out.println(value2); }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix