本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:天地无用
日志总数:55
评论数量:43
留言数量:1
访问次数:195218
建立时间:2008年4月17日




[java基础]反射与访问控制(转)
软件技术

kkk888929 发表于 2008/7/31 18:30:29

 久闻反射可以破坏私有属性、私有方法的访问控制,一直也没有找到方法 突然看到原来有一个class AccessibleObject 中 的setAccessible 可以设置访问权限 Field、Method 两个类均继承这个类,因此Field 、Method 都可以设置访问权限 下面是个小例子: public class FieldValueGet { /**   * @param args   * @throws IllegalAccessException   * @throws IllegalArgumentException   * @throws NoSuchMethodException   * @throws SecurityException   * @throws InvocationTargetException   */ public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchMethodException, InvocationTargetException {      FieldValue fv=new FieldValue("unid","name");   Field[]fields=fv.getClass().getDeclaredFields();   /**    * 通过get方法正常获取 属性的值    */   for(int i=0;i<fields.length;i++){    System.out.print(fields[i].getName()+":");    String methodName="get"+fields[i].getName().toUpperCase().substring(0, 1)    +fields[i].getName().toLowerCase().substring(1);    Method method=fv.getClass().getMethod(methodName, new Class[]{});    System.out.println(method.invoke(fv, new Object[]{}));        }   /**    * 利用反射来破坏 java private属性    */   Field.setAccessible(fields, true);//设置所有的 属性都是可访问的   for (int i = 0; i < fields.length; i++) {    fields[i].setAccessible(true);    System.out.println(fields[i].getName()+":"+fields[i].get(fv));   }   /**    * 破坏方法的private 属性    */   Method[] methods=fv.getClass().getDeclaredMethods();   Method.setAccessible(methods, true);   System.out.println(methods.length);   for (int i = 0; i < methods.length; i++) {    methods[i].invoke(fv, new Object[]{});   }    } } class FieldValue{ private String unid; private String name; public String getUnid() {   return unid; } public String getName(){   return name; } public FieldValue(String unid,String name){   this.unid=unid;   this.name=name; } private void getNameAndUnid(){   System.out.println("我是私有方法!!"); } }


阅读全文(1442) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.406 second(s), page refreshed 144806517 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号