zoukankan      html  css  js  c++  java
  • 01_反射_04_反射类的属性

    【工程截图】

    【User.java】

    package com.Higgin.reflect;
    
    public class User {
    
        public User(){
            System.out.println("构造方法:User()");
        }
        
        //属性一
        public String name="HigginCui";
        //属性二(private类型,为其设置get方法)
        private String password="123456";
        public String getPassword() {
            return password;
        }
    
        //属性三 静态私有属性
        private static int age=18;
        
        
    }

    【情况一】public String name="HigginCui"

    【testUser.java】

        @Test
        //反射类的属性  public String name="HigginCui";
        public void test1() throws Exception{
            User user =new User();
            Class clazz=Class.forName("com.Higgin.reflect.User");
            Field f =clazz.getField("name");  //获取"name"属性的值
            
            /* 获取属性的值 */
            Object value=f.get(user);  //假如不知道属性的类型,先获取属性的值
            Class type=f.getType();  //然后获取属性的类型
            System.out.println("获取的属性类型为:"+type); //打印属性类型
            if(type.equals(String.class)){  //判断是否为String类型的属性
                String name=(String)value;
                System.out.println("获取的name值 : "+name);
            }
            System.out.println("-------------------------");
            /* 设置属性的值 */
            f.set(user, "张三");
            System.out.println("设置的name值:"+user.name);
        }

    【运行结果】

    【情况二】private String password="123456";

    【testUser.java】

    @Test
        //反射类的属性  private String password="123456";
        public void test2() throws Exception{
            User user =new User();
            Class clazz=Class.forName("com.Higgin.reflect.User");
            Field f =clazz.getDeclaredField("password");
            f.setAccessible(true);  //又见到了"暴力"反射
            
            /* 获取属性的值 */
            Object value=f.get(user);  //假如不知道属性的类型,先获取属性的值
            Class type=f.getType();  //然后获取属性的类型
            System.out.println("获取的属性类型为:"+type); //打印属性类型
            if(type.equals(String.class)){  //判断是否为String类型的属性
                String password=(String)value;
                System.out.println("获取的password值 : "+password);
            }
            System.out.println("-------------------------");
            /* 设置属性的值 */
            f.set(user, "666666");
            System.out.println("设置的password值:"+user.getPassword());
        }
        

    【运行结果】

    【情况三】private static int age=18; (同情况二)

    【testUser.java】

    @Test
        //反射类的属性  private static int age=18;
        public void test3() throws Exception{
            User user =new User();
            Class clazz=Class.forName("com.Higgin.reflect.User");
            Field f =clazz.getDeclaredField("age");
            f.setAccessible(true);  //只要是private都需要"暴力"反射
            /* 获取属性的值 */
            Object value=f.get(user);  //假如不知道属性的类型,先获取属性的值
            Class type=f.getType();  //然后获取属性的类型
            System.out.println("获取的属性类型为:"+type); //打印属性类型
            if(type.equals(int.class)){  //判断是否为String类型的属性
                int age=(int)value;
                System.out.println("获取的age值 : "+age);
            }
        }

    【运行结果】

  • 相关阅读:
    星球居民突破 1800 人!
    测试数据管理
    解决InnoDB: Table mysql/innodb_index_stats has length mismatch in the column name table_name. Please run mysql_upgrade
    Warning: file_get_contents(): open_basedir restriction in effect. File(/proc/uptime) is not within the allowed path(s)解决方法
    Java终止线程的三种方式
    线程中断interrupt
    Linux 开启防火墙 避免非干系人误操作的处理
    Oracle12c 快速启动命令设置
    Docker 运行 Redis Rabbitmq seata-server ftp 的简单办法
    mysql8 CentOS7 简要安装说明
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5771332.html
Copyright © 2011-2022 走看看