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); }
运行结果:

 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号