美文网首页Android求生之路Java认真看
Class.getField和getDeclaredField的

Class.getField和getDeclaredField的

作者: STEVENNO1 | 来源:发表于2017-06-22 22:31 被阅读0次

    getField和getDeclaredField都是Class类的方法,反射成员变量时使用。(getMethod和getDeclaredMethod类似)

    getField

    获取一个类的 ==public成员变量,包括基类== 。

    getDeclaredField

    获取一个类的 ==所有成员变量,不包括基类== 。

    Field.setAccessible

    成员变量为private,必须进行此操作。

    示例

    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()); // 此处结果是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()); // 此处结果是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); // 此处结果是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;    
        }    
    }
    

    相关文章

      网友评论

        本文标题:Class.getField和getDeclaredField的

        本文链接:https://www.haomeiwen.com/subject/oflqcxtx.html