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); } }
【运行结果】