访问操作类私有属性和方法的两种方式
来源:互联网 发布:淘宝直通车定向投放 编辑:程序博客网 时间:2024/06/05 02:02
有些时候由于由于项目需要,我们在只知道类名和方法名的情况下需要去访问那个类的私有方法和属性。
下面是两者是在只知道类名的情况下去访问那个类私有变量和方法的例子:
1.通过内部类。(这种方式需要事先知道以后要被访问,故而设置成内部类的方式,不过这种方式用起来有点牵强,个人觉得)
例子:
package com.jeelon.test1;/** * 内部类实现访问一个类的私有方法 * * @author Jeelon * */class TestInner1 {private void hello() {System.out.println("Hello,I am Private ");}public class Inner {public void hello1() {hello();}}}class TestInner {public static void main(String[] args) {new TestInner1().new Inner().hello1();}}
2. 反射
这种方式就是很常用的了,反射是java最高级的技术,这就不用我雜了把。
Test2类:里面有私有的变量和方法:
package com.jeelon.test1;/** * 定义私有方法和变量让其他类访问 * * @author Jeelon * */public class Test2 {private int i = 5;private String h = "hello";private void test() {System.out.println("this is a ");}private String getStr(String jeelon) {System.out.println(jeelon);return jeelon;}}
下面定义访问Test2内部私有变量和属性的类:
package com.jeelon.test1;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * 使用反射调用对象私有方法,私有属性 * * @author Jeelon * */public class FangWenPrivate {public static void main(String[] args) throws Exception {tt2();}private static void tt2() throws Exception {// 获得类对象Object obj = Class.forName("com.jeelon.test1.Test2").getConstructor().newInstance();// 调用别的类的无参无返回私有方法;Method method = obj.getClass().getDeclaredMethod("test", null);method.setAccessible(true);Object o = method.invoke(obj, null);System.out.println("返回:" + o);System.out.println("---------------------------");// 调用别的类的有参又返回私有方法;Method method2 = obj.getClass().getDeclaredMethod("getStr",String.class);// getStr : 方法名. String.class:参数类型method2.setAccessible(true);Object o1 = method2.invoke(obj, "Heelon");System.out.println("返回:" + o1);// 调用别的类的私有属性Field field = obj.getClass().getDeclaredField("i");field.setAccessible(true);System.out.println("获得类的私有属性:" + field);System.out.println("获得obj私有属性的值:" + field.getInt(obj));// 调用别的类的私有属性Field field2 = obj.getClass().getDeclaredField("h");field2.setAccessible(true);System.out.println("获得类的私有属性:" + field2);System.out.println("获得obj私有属性的值:" + field2.get(obj));}}
反射真的是一种很好的技术,用程序员的话:很好!很强大!...
愿多多指正。谢谢!
- 访问操作类私有属性和方法的两种方式
- Java反射的三种实现方式,访问私有方法和私有属性
- 访问类的私有变量的两种方式
- 通过反射访问任意类的私有方法和属性
- java 反射方式访问私有属性和方法
- 反射访问类的私有属性对象的私有方法
- Python访问类的私有属性和私有方法的正确姿势
- 子类会继承父类的私有方法和私有属性,只是不能直接访问
- 使用反射操作类的私有属性(Field)和私有方法(Method)
- javascript修改属性的两种方法和访问文本
- java反射访问私有属性和方法
- python 类的私有属性和方法
- python对象:访问私有属性和私有方法
- php中类外部访问类私有属性的方法
- python 直接访问类的私有属性或方法
- iOS中访问和修改一个类的私有属性
- js属性和方法的可见性:私有属性(方法),实例属性(方法),类属性(方法)
- js的对象属性的两种访问方式和对象的内存理解
- 多线程讲解
- BitmapInfo Structure(BitmapInfo 结构来自MSDN)
- 约瑟夫问题
- verilog设计经验总结
- Android源代码简要分析
- 访问操作类私有属性和方法的两种方式
- 归并排序
- 打开文件窗口、保存文件窗口、文件流的方法
- Flash PBEngine 使用MovieClip的swc格式
- 10亿个数选取重复次数最多的100个整数
- Windows连接出错总结
- 快速排序
- 堆排序
- Java笔记之泛型接口