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);
        }
    }

【运行结果】

原文地址:https://www.cnblogs.com/HigginCui/p/5771332.html