黑马程序员技术交流社区

标题: java暴力访问用在什么时候/ [打印本页]

作者: 心弦上的景致    时间: 2013-5-10 09:01
标题: java暴力访问用在什么时候/
java中什么时候用暴力访问
作者: 杜超    时间: 2013-5-10 09:07
数据私有化的时候,也就是正常方法访问不到时,只能暴力访问
作者: 心弦上的景致    时间: 2013-5-10 09:13
杜超 发表于 2013-5-10 09:07
数据私有化的时候,也就是正常方法访问不到时,只能暴力访问

具体怎么实现的 能用代码体现一下吗
作者: 杜超    时间: 2013-5-10 09:46
心弦上的景致 发表于 2013-5-10 09:13
具体怎么实现的 能用代码体现一下吗

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

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

运行类

运行类

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

资源类

资源类

作者: 刘胜寒    时间: 2013-5-10 10:04
java暴力访问。
被私有化的东西,可以通过反射的方法获取,或者修改。
被私有化的方法可以被调用,被私有化的构造器也可以被获取。
java暴力访问,主要是访问被private 修饰的东西。


看看后面有没有更好的回答。。。
期待ing...
作者: 范德农    时间: 2013-5-11 02:18
暴力访问是反射中用于访问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. }
复制代码

作者: 殇_心。    时间: 2013-5-11 22:47
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
作者: 杨修    时间: 2013-5-15 10:39
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;  
    }  
}
作者: 赵崇友    时间: 2013-5-15 10:52
一般不建议使用暴力访问。。既然人家都私有了,就不想外界知道了。 如果想对外暴露,就会有一个get和set方法。。  
这里说暴力访问仅仅是介绍了下可以通过这种方式访问私有变量而已,并没有说到实际应用。。
作者: 袁梦希    时间: 2013-5-18 12:52
如果问题已经解决了,那么大家请把帖子的类型改为“已解决”,在自己帖子的左下角点编辑,然后选择帖子的分类进行改正。{:soso_e163:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2