Day14_84_通过反射机制修改和获取class里的属性值

通过反射机制修改和获取class里的属性值

  * 属性对象.set(Object,属性值)   给Object对象中的某个属性赋值(属性对象)

  * 属性对象.get(Object);  获取Object对象中的某个属性赋值(属性对象)

  * 属性对象.setAccessible(true);  打破该属性的封装(private) ,虽然使用反射机制可以打破封装性,但是会导致数据不安全。

  * 代码实例

    import java.lang.reflect.Field;
    import java.lang.reflect.Modifier;

    public class ReflectTest07 {
        public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException {

            //获取Class对象
            Class c=Class.forName("com.shige.Reflect.User");


            //利用Class对象创建一个对应类型的对象
            Object object=c.newInstance(); //调用了User类的无参构造方法


            //获某个特定的属性
            Field userNoField=c.getDeclaredField("userNo"); //通过属性名来区分


            //给object对象也就是new User()对象,中的userNoField也就是userNo属性赋值
            userNoField.set(object,1000);


            //获取object对象的userNoField属性也就是userNo属性的值
            Object userNo=userNoField.get(object);
            System.out.println(userNo);  //1000



            // 上面是public修饰的属性, 如果是private的呢?


            //获取userName属性
            Field userNameField=c.getDeclaredField("userName");


            //打破该属性的封装(private)   虽然使用反射机制可以打破封装性,但是会导致数据不安全。
            userNameField.setAccessible(true);


            //给object对象也就是User对象的 userNameField属性(userName变量)赋值
            userNameField.set(object,"施歌");


            //获取object对象的userNameField属性的值
            Object name=userNameField.get(object);


            System.out.println(name);  // java.lang.IllegalAccessException 因为是private修饰的所以没有权限访问,这时候只有打破封装才可以。


         }
    }
posted @ 2021-04-09 21:13  失昼  阅读(119)  评论(0)    收藏  举报