今天看到了序列化(serialize) 来了问题。。。
那个Serializable接口有一种方法可以也让我们自定义序列化,就是在类中实现writeObject方法和readObject方法,而且书上说还设成了private,那ObjectInputStream和ObjectOutputStream是如何调用他的呢 ?明明是private,也不可以调用类中的其他方法来调用 ,书上也说到这问题了 可是他说了半天也没说明白。。。估计是翻译的不好。。。。希望老鸟帮帮忙
------解决方案--------------------
通过反射调用private方法及属性
------解决方案--------------------
------解决方案--------------------
是呀,不知道反射调用,怎么用的
不过读写只用ObjectInputStream就可以了。。。
------解决方案--------------------
一个反射的例子
- Java code
import java.lang.relfect.*;class A { private void test() { System.out.println("this is a private method"); }}public class Test { public static void main(String[] args) throws Throwable { A a = new A(); Class c = A.class; Method m = c.getDeclaredMethod("test", new Class[]{}); //获取方法 m.setAccessible(true); //修改访问权限 m.invoke(a, new Object[]{}); //调用方法 }}
------解决方案--------------------
本地方法调用
------解决方案--------------------
“对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。”
m.invoke(a,new Object[]{}),表示唤醒 a 对应的类实例中 的 m 方法, 其参数为 Object[]{}
楼主要深究反射的话, 建议多看看java类加载机制,jvm运行的一些原理等等,应该很有帮助。