2016-01-04 86 views
2

我一直在尋找網頁找到一些與java中的枚舉類相關的查詢的答案。爲什麼枚舉常量沒有finalize方法?

我很好奇,想知道枚舉類的內部,因此我打開源代碼,並發現了一些方法,有沒有如下的 -

protected final void finalize() { } 

我發現finalize方法有哪些是一個空白的實現,而不是正確評論。所以我的查詢是爲什麼一個枚舉類不能有finalize方法意味着在enum類中有finalize方法有什麼害處,或者是否有任何其他原因背後呢。

看到這堂課後我更加困惑。任何幫助將不勝感激。提前致謝。

+0

最好把它們分成2個問題。如果一個答案只回答其中一個問題,另一個回答另一個問題,你會做什麼? – user1803551

+0

好吧,我會將其分成兩個問題。 – rraghuva

+2

[垃圾收集器運行在枚舉類型上嗎?]可能的重複(http://stackoverflow.com/questions/23525768/does-garbage-collector-run-on-enum-type) – user1803551

回答

-2

1) - 枚舉用於聲明常量,枚舉constatnts靜態,即類級別...因此不能被serailized。

2)-all除了toString()以外的對象類方法在Enum類中被覆蓋並聲明爲final,所以最終用戶不能修改任何常量。

+1

嗨Shobhit,感謝您的回覆......但我可以看到枚舉類也正在實現可序列化的接口。請檢查簽名。 公共抽象類的Enum > 實現可比,序列化 – rraghuva

+0

你嘗試序列化一個'enum'?你有例外嗎? – user1803551

+0

枚舉*可以被序列化,如果他們實現了'Serializable',並且在對象序列化規範中有很多措辭來支持它(http://docs.oracle.com/javase/7/docs/platform /serialization/spec/serial-arch.html#6469)。 – EJP

0

Enum類只有一個實例每枚枚舉值在單個JVM安裝中被剝離。它們基本上是JVM上的單例。

在Oracle JVM上很容易證明這一點,因爲對象的缺省標識哈希碼是內存地址。然後,當您設置Enum實例時,您可以在程序中的任何地方看到它,它實際上是同一個對象。

相關問題