2016-04-24 75 views
1

調用構造函數創建我讀了反序列化Java對象才知道,如何實例不需要在Java

反序列化的Java對象,如果實例實現Serializable接口,那麼這個類的一個實例,而不必調用創建它是構造函數。

通過經歷這個link,我開始認識到Java使用sun.reflect.ReflectionFactory newConstructorForSerialization()方法創建新的Class實例,而無需調用構造函數。

是否爲反序列化過程創建了全新的構造函數?

我想知道如何創建對象而不調用它的構造函數。 這種方法如何實際運作,有人可以用簡單的話來解釋。

回答

1

在Java字節碼中,構造函數實際上是您在已創建的對象上調用的方法。所以如果你寫字節碼,你可以簡單地跳過第二步。

實際上,您可以在字節碼中表達很多控制流構造,但不能用Java源代碼編寫。

內部,Java序列化內置到JVM中,因此它可以繞過它喜歡的任何規則。

這只是強調了Java編程語言(其中new總是調用構造函數)和Java平臺(其中NEW是將所需類型的未構造實例推入堆棧的操作碼)之間的區別。