利用反射直接访问类中的私有变量

 

package reflection;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class testMain {

 /**
  * @param args
  */
 public static void main(String[] args) {
  ClassLoader loader = testMain.class.getClassLoader();
  try {
   Class c = loader.loadClass("reflection.Empolyee");
   //Empolyee类中包含私有变量name,默认值为a;包含getName()方法
   Empolyee e = (Empolyee)c.newInstance();
   Field[] fields = c.getDeclaredFields();
   //获取名为name的属性
   Field f = c.getDeclaredField("name");
   //取消访问权限检查
   f.setAccessible(true);
   //将reflection.Empolyee类型的实例e中的name属性值设为123
   f.set(e, "123");
   //获取名为getName的方法,没有参数
   Method m = c.getMethod("getName", null);
   //调用getName方法
   System.out.println(m.invoke(e, null));
     
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SecurityException 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();
  } catch (InstantiationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchFieldException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值