zoukankan      html  css  js  c++  java
  • Java之反射机制一:获取及其操作类的属性

    1.实体类

    public class Dog {
        private String color;
    
        public boolean hasTail;
    
        public boolean isHasTail() {
            return hasTail;
        }
    
        public void setHasTail(boolean hasTail) {
            this.hasTail = hasTail;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
        @Override
        public String toString() {
            return "Dog{" +
                    "color='" + color + '\'' +
                    '}';
        }
    }

    2.通过java反射机制获取类的属性的值

    @Test
    public void test1(){
        Dog dog = new Dog();
        dog.setColor("白");
        Class clazz = dog.getClass();
        try {
            Field color = clazz.getDeclaredField("color");
            //设置即使该属性是private,也可以进行访问(默认是false)
            color.setAccessible(true);
            String c = color.get(dog).toString();
            System.out.println(dog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    运行结果:

     

    3.通过java反射机制设置类的属性

    @Test
        public void test2(){
            Dog dog = new Dog();
            Class clazz = dog.getClass();
            try{
                Field color = clazz.getDeclaredField("color");
                color.setAccessible(true);
                color.set(dog,"黑");
                System.out.println(dog);
            }catch (Exception e){
                e.printStackTrace();
            }
    
        }

     运行结果:

     4.getField方法和getDeclaredField方法两者区别(getFields和getDeclaredFields同理)

    getField:只能获取类和其父类的public属性

    getDeclaredField:该方法只可以获取类本身的属性(private public protected default),但不包括父类

    实体类BigDog.java继承于Dog.java

    public class BigDog extends Dog {
        private Integer age;
    
        public String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "BigDog{" +
                    "age=" + age +
                    '}';
        }
    }

    测试getFields方法:

    @Test
        public void test(){
            BigDog dog  = new BigDog();
            Class dogClass = dog.getClass();
            //只能获取类及其父类的公有属性
            Field[] fields = dogClass.getFields();
            for (Field field : fields) {
                System.out.println(field);
            }
        }

     运行截图:

     测试getDeclaredFields方法:

    @Test
        public void test3(){
            BigDog dog  = new BigDog();
            Class dogClass = dog.getClass();
            //能获取该类中所有的属性,但是不能获取父类的属性
            Field[] fields = dogClass.getDeclaredFields();
            for (Field field : fields) {
                System.out.println(field);
            }
        }

    运行截图:

  • 相关阅读:
    Oracle数据库的一些常用命令
    计算机网络:计算路由表下一跳
    怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结
    计算机网络-以太网,局域网,城域网,广域网,互联网,因特网,万维网的区分
    Apache与Tomcat有什么关系和区别
    Oracle 添加用户并赋权,修改密码,解锁,删除用户的方法
    使用Oracle的PROFILE对用户资源限制和密码限制
    通过修改profile 来修改账号的过期时间
    解决oracle用户过期问题
    【项目】项目36
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12528425.html
Copyright © 2011-2022 走看看