2013-11-04 41 views
2

我想做一些java對象的序列化。爲此,我想實例化(對我來說)未知的類,它可能沒有默認的構造函數。因爲我不知道應該如何調用其他構造函數(我可以知道參數,是的,但那不是很有用),我想創建一個類的「空白」實例。是否有可能在不調用任何構造函數的情況下實例化一個類?

之後我會使用反射來設置它的屬性。

這是不是有可能?

+0

由於@SotiriosDelimanolis說這是不可能的。這部分地允許類作者控制它們類的實例如何實例化,例如,在創建單例對象時經常使用在類上有私有構造函數。 – Taylor

+0

你想要反序列化什麼樣的對象? –

+0

它也是通過序列化完成的。 –

回答

1

總之,沒有。

但是,你可以調用許多不同的方式構造。它可能是一個「默認」構造函數,或者實際上並未在代碼中表達的構造函數,或者是在執行其他項目時(如反序列化)的內部構造函數。

構造函數返回一個值,並且由幾個重要的內部的步驟。

  1. JVM需要在堆上分配內存以保存類的成員數據(以及對支持項的引用)。
  2. 該內部JVM數據結構的地址被賦予一個類型安全的引用。
  3. 適當<init>(...)方法被調用(從事物的編程方面,這就是人們覺得作爲一個構造函數方法,typcially書面public Object(...) { ... }的)。
  4. 引用返回到執行上下文。

所以構造不僅僅是你調用的代碼,它是對象創建的實現。您可以通過各種方式避免提供方法,但建設所需的內部操作並不是真正可以跳過的。如果他們是,那麼你會缺乏對象引用。

5

它使用不安全類是可能的。此外,還有可能通過這個sun.x類獲得「constructorForSerialization」

ReflectionFactory.getReflectionFactory()。newConstructorForSerialization(clazz,c);

相關問題