Class.getField和getDeclaredField的區(qū)別

getField和getDeclaredField都是Class類的方法,反射成員變量時使用。(getMethod和getDeclaredMethod類似)

getField

獲取一個類的 ==public成員變量,包括基類== 。

getDeclaredField

獲取一個類的 ==所有成員變量,不包括基類== 。

Field.setAccessible

成員變量為private,必須進(jìn)行此操作。

示例

public class MyUtil {    
    
    public static void main(String[] args) {    
       testFields();    
    }    
        
    public static void testFields() {    
        try {    
            System.out.println("Declared fields: ");    
            Field[] fields = Dog.class.getDeclaredFields();    
            for(int i = 0; i < fields.length; i++) {    
                System.out.println(fields[i].getName()); // 此處結(jié)果是color, name, type, fur    
            }    
                
            System.out.println("Public fields: ");    
            fields = Dog.class.getFields();    
            for(int i = 0; i < fields.length; i++) {    
                System.out.println(fields[i].getName()); // 此處結(jié)果是color, location    
            }    
    
            Dog dog = new Dog();    
            dog.setAge(1);    
            Method method = dog.getClass().getMethod("getAge", null);    
            Object value = method.invoke(dog);    
            System.out.println(value); // 此處結(jié)果是1    
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
    }    
    
}    
    
class Dog extends Animal {    
    public int color;    
    protected int name;    
    private int type;    
    int fur;    
}    
    
class Animal {    
    public int location;    
    protected int age;    
    private int height;    
    int length;     
    
    public int getAge() {    
        return age;    
    }    
    
    public void setAge(int age) {    
        this.age = age;    
    }    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容