2012-05-01 35 views
2

核心Java API中的許多類都是final的(包裝類,字符串,數學)。 這是爲什麼?爲什麼包裝類,字符串...最後?

+0

問誰發明了這些軟件包。我的猜測是「只是因爲」,或者「所以JDK將保證與Strings和Wrapper類一起工作」(避免子類會改變行爲的問題)。 –

+0

因爲他們不打算延期? – assylias

+0

Duplicate:http://stackoverflow.com/questions/2068804/why-is-string-final-in-java – Mat

回答

1

您可能想要阻止其他程序員創建子類或重寫某些方法。對於這些情況,您使用最終的關鍵字。

字符串類是爲了不可變 - 字符串對象不能被他們的任何方法修改。由於java不強制執行此操作,所以班級設計師做到了。沒有人可以創建String的子類。

希望這回答你的問題。

+0

它不應該;它解釋了什麼'final' *做了*,但不是解釋爲什麼*這些特定的類是'final'。 「偶爾的」 –

+1

- 事實上,這應該是默認的! –

+0

最終類,動態類加載和安全性之間是否存在任何概念.Plz解釋。 –

6

由於安全原因,它們是最終的。可能還有其他原因,但安全性是最重要的。

想象一下繼承java.lang.String的能力,並將您自己的可變實現提供給安全敏感的API。 API將沒有選擇,只能採取你的字符串(記住替代原則),但是你可以改變它們下面的字符串(在併發線程上或在API返回之後),即使它們已經檢查它是有效。

同樣適用於基元的包裝:在任何情況下,您都不希望看到它們是可變的,因爲它違反了使用這些類編碼在API中的行爲的重要假設。

製作String最後通過不讓其他人提供他們自己的,可能是敵對的類實現作爲最基本的String來解決這個問題。

相關問題