2016-04-24 34 views
1

调用构造函数创建我读了反序列化Java对象才知道,如何实例不需要在Java

反序列化的Java对象,如果实例实现Serializable接口,那么这个类的一个实例,而不必调用创建它是构造函数。

通过经历这个link,我开始认识到Java使用sun.reflect.ReflectionFactory newConstructorForSerialization()方法创建新的Class实例,而无需调用构造函数。

是否为反序列化过程创建了全新的构造函数?

我想知道如何创建对象而不调用它的构造函数。 这种方法如何实际运作,有人可以用简单的话来解释。

回答

1

在Java字节码中,构造函数实际上是您在已创建的对象上调用的方法。所以如果你写字节码,你可以简单地跳过第二步。

实际上,您可以在字节码中表达很多控制流构造,但不能用Java源代码编写。

内部,Java序列化内置到JVM中,因此它可以绕过它喜欢的任何规则。

这只是强调了Java编程语言(其中new总是调用构造函数)和Java平台(其中NEW是将所需类型的未构造实例推入堆栈的操作码)之间的区别。