学习笔记_java.lang.reflect.Field_解决IllegalAccessException异常的方法

http://www.mysjtu.com/page/M0/S208/208632.html


Field类方法:


Get(Object obj) 查看指定obj 的值


Set(Object obj,Object value) 设置指定obj 的值为value


因为Java安全机制只允许反射机制查看任意对象包含哪些域<字段>,而不允许读取他们的值..所以想读取他们的值,,需调用AccessibleObjectSetAccessible(Boolean falg);   为单个域取消检查


SetAccessible(AccessibleObject[] array,Boolean falg) 为一组域取消检查


<AccessibleObject Field Mothd Constructor 超类>


一个简单的更改指定对象域<字段>值的例子


实体类:Animal.java


package com.accp.entity;

public class Animal {


    private String name;


    private String age;

    public String getName() {


       return name;


    }

    public void setName(String name) {


       this.name = name;


    }

    public String getAge() {


       return age;


    }

    public void setAge(String age) {


       this.age = age;


    }

    public Animal() {


    }

    public Animal(String name, String age) {


       this.name = name;


       this.age = age;


    }

}

Test.java

package com.accp.test;

import java.lang.reflect.Field;

import com.accp.entity.Animal;

public class FieldTest {

    public static void main(String[] args) {


       Animal animal = new Animal("xw","12");   

       Class cls = animal.getClass();    

        try {


           Field xw = cls.getDeclaredField("name"); //得到本类名字为name 字段


           xw.setAccessible(true);     //设置可以访问指定对象的私有域


           xw.set(animal, "xz");    //将用set(object obj,object value)方法为指定对象域设置值


           Object o = xw.get(animal);


           System.out.println(o.toString());


        } catch (SecurityException e) {


           // TODO Auto-generated catch block


           e.printStackTrace();


       } catch (NoSuchFieldException e) {


           // TODO Auto-generated catch block


           e.printStackTrace();


       } catch (IllegalArgumentException e) {


           // TODO Auto-generated catch block


           e.printStackTrace();


       } catch (IllegalAccessException e) {


           // TODO Auto-generated catch block


           e.printStackTrace();


       }


    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值