【问题标题】:How instance is created without calling constructor in java如何在不调用java中的构造函数的情况下创建实例
【发布时间】:2016-04-24 22:52:48
【问题描述】:

我阅读了反序列化 java 对象并了解到这一点,

在反序列化java对象时,如果实例实现了可序列化接口,则创建该类的实例而不调用它的构造函数。

通过查看link,我了解到 Java 使用 sun.reflect.ReflectionFactory newConstructorForSerialization() 方法来创建新的 Class 实例,而无需调用构造函数。

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

我想知道如何在不调用构造函数的情况下创建对象。 这个方法实际是如何工作的,谁能用简单的话解释一下。

【问题讨论】:

    标签: java serialization deserialization


    【解决方案1】:

    在 Java 字节码中,构造函数实际上是您在已创建的对象上调用的方法。因此,如果您正在编写字节码,您可以直接跳过第二步。

    事实上,有很多控制流构造可以用字节码表示,但不能用 Java 源代码编写。

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多