A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心弦上的景致 中级黑马   /  2013-5-10 09:01  /  3268 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java中什么时候用暴力访问

9 个回复

倒序浏览
数据私有化的时候,也就是正常方法访问不到时,只能暴力访问
回复 使用道具 举报
杜超 发表于 2013-5-10 09:07
数据私有化的时候,也就是正常方法访问不到时,只能暴力访问

具体怎么实现的 能用代码体现一下吗
回复 使用道具 举报
心弦上的景致 发表于 2013-5-10 09:13
具体怎么实现的 能用代码体现一下吗

访问Resourse类里面的私有成员变量值
Demo类里提供了两个方法访问,一个是普通方法访问,运行异常
一个是暴力方式,获得私有变量值

2.jpg (58.58 KB, 下载次数: 0)

运行类

运行类

1.jpg (33.8 KB, 下载次数: 0)

资源类

资源类

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
java暴力访问。
被私有化的东西,可以通过反射的方法获取,或者修改。
被私有化的方法可以被调用,被私有化的构造器也可以被获取。
java暴力访问,主要是访问被private 修饰的东西。


看看后面有没有更好的回答。。。
期待ing...

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
暴力访问是反射中用于访问private属性的,对于那些没法通过外部get set方法访问的属性,这时可以用暴力访问
  1. import java.lang.reflect.Field;  
  2.   
  3. public class Test {  
  4.      public static void main(String []args) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchFieldException{  
  5.           PrivateObject privateObject = new PrivateObject("The Private Value");  
  6.   
  7.           Field privateStringField = PrivateObject.class.  
  8.                       getDeclaredField("privateString");  
  9.   
  10.           privateStringField.setAccessible(true);  
  11.   
  12.           String fieldValue = (String) privateStringField.get(privateObject);  
  13.           System.out.println("fieldValue = " + fieldValue);  
  14.       }  
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
杨修 中级黑马 2013-5-15 10:39:54
8#
java暴力访问表现在反射机制中,通常利用java的反射机制来访问类中的私有成员变量,私有构造方法,私有方法 ;
下面是一个方面的用例,希望对你有用:
package my;  
public class Data {  
    private static int data;  
    private String name;  
    private Data(){  
         
    }  
    private Data(int data,String name){  
        this.data = data;  
        this.name = name;  
    }  
    private void showName(){  
        System.out.println("Name is:"+name);  
    }  
    private static void showData(){  
        System.out.println("Data is:"+getData());  
    }  
    private static int getData(){  
        return data;  
    }  
    private void setData(int data){  
        this.data = data;  
    }  
    private void setString(String name){  
        this.name = name;  
    }  
}

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
一般不建议使用暴力访问。。既然人家都私有了,就不想外界知道了。 如果想对外暴露,就会有一个get和set方法。。  
这里说暴力访问仅仅是介绍了下可以通过这种方式访问私有变量而已,并没有说到实际应用。。
回复 使用道具 举报
如果问题已经解决了,那么大家请把帖子的类型改为“已解决”,在自己帖子的左下角点编辑,然后选择帖子的分类进行改正。{:soso_e163:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马