Java
語言的最初設(shè)計者將“const”關(guān)鍵字作為保留字。但該術(shù)語仍未實現(xiàn),而且很可能永遠(yuǎn)不會實現(xiàn)。這種情況讓許多開發(fā)人員想知道為什么。想學(xué)習(xí)java技術(shù),建議考慮報名參加Java培訓(xùn),有明確的學(xué)習(xí)路線和全面系統(tǒng)的課程,能獲得較快提升。
讓我們更多地了解 Java 中的“const”關(guān)鍵字以及描述語言中常量的一些替代方法。
Java 中的“const”是什么意思?
任何看過 Java
中的“const”關(guān)鍵字的人都會從邏輯上假設(shè)其最初的意圖是定義一個常量值。這個假設(shè)不會太離譜。
競爭語言 C 和 C++ 都使用“const”關(guān)鍵字,但這些語言并非純粹面向?qū)ο?。問題就在這里。在 Java
中,作為“const”的東西到底意味著什么?
保持不變是否意味著實例變量不會改變?
保持不變是否意味著類變量不會改變?
常量是否意味著對象的方法不能被覆蓋?
保持不變是否意味著對象引用不會改變?
恒定是否意味著對象是不可變的?
考慮到上述所有問題,另一個大問題是如果一個對象僅在某些情況下是恒定的?
例如,某些語言允許“const”作為方法簽名的一部分,這表明對象及其屬性在方法內(nèi)使用的短時間內(nèi)不能更改。這有時被稱為常量正確性。語言架構(gòu)師在檢查這些任務(wù)并試圖確定“const”關(guān)鍵字的含義時,最終可能會陷入一個深深的兔子洞。通過java培訓(xùn),你可以學(xué)習(xí)更多java知識,以提高java技能。
Java 的“final”與“const”關(guān)鍵字
在 Java 中最初可能使用“const 關(guān)鍵字”解決的許多用例使用 Java 的“final”關(guān)鍵字已經(jīng)足夠解決了。在
Java 中,“final”用于:
將原始值標(biāo)記為常量;
表示方法不能被覆蓋;
指定對象引用不能更改;
確保變量在方法中不變。
當(dāng)“static”和“final”關(guān)鍵字組合時,可以使類級變量保持不變。雖然這并沒有完全涵蓋在其他語言中使用“const”關(guān)鍵字的所有不同場景,但它已經(jīng)接近了。此外,將“靜態(tài)”和“最終”組合在一起的選擇為常量屬性的行為方式提供了更大的靈活性,而不是僅使用一個關(guān)鍵字來嘗試解決實例和類級別的語義。
當(dāng)開發(fā)人員考慮語言通過允許將“static”和“final”關(guān)鍵字菊花鏈在一起而提供的功能和靈活性時,人們可能會推斷
Java 中未實現(xiàn)“const”關(guān)鍵字的原因是因為它不需要。與 Java
中的“const”關(guān)鍵字的實現(xiàn)相比,“static”和“final”關(guān)鍵字的組合有效且可以說提供了一種更具表現(xiàn)力的方式來聲明不變的變量。
不可變對象
就完全不可變的對象而言,歷史上的解決方法是將實例變量聲明為私有并通過公共 setter 和 getter
限制訪問。最近,Java 引入了值類型的概念作為 JEP 169 的一部分。這將為該語言添加不可變、無引用的對象,并再次提供一種 Java
語言語法來實現(xiàn)許多與“const”相關(guān)的概念。在java培訓(xùn)中,也有很多關(guān)于java安全工具的學(xué)習(xí),理論知識+實踐項目,雙管齊下,學(xué)以致用,讓你深入淺出地學(xué)習(xí)java。
關(guān)于在 Java 中使用“const”關(guān)鍵字來實現(xiàn) const 正確性的討論始于 1999
年。但是,增強提案被拒絕為特性蠕變。語言架構(gòu)師斷言,在完全增量之后在 Java 中添加 const 實現(xiàn)——JDK
的長期支持版本已經(jīng)推出——將導(dǎo)致代碼膨脹,并且可能存在向后兼容性問題,從而完全扼殺了這個概念。從那以后,在 Java
中實現(xiàn)“const”關(guān)鍵字的想法就再也沒有被重新審視過。
Java 中的 const 關(guān)鍵字不能在不導(dǎo)致編譯時錯誤的情況下使用。
為什么“const”沒有在 Java
中實現(xiàn)?如果沒有實現(xiàn)它的意圖,為什么要讓const成為保留字呢?
一個可能的原因是避免混淆。如果“const”不是保留字,則允許開發(fā)人員使用該短語來命名變量。試想一下,對于學(xué)習(xí)使用“const”實現(xiàn)的語言進行編程的
C++ 和 Javascript 開發(fā)人員來說,這可能會造成多大的困惑。簡單地將 Java
中的“const”關(guān)鍵字設(shè)為保留字有助于避免任何混淆。
為什么 Java 中的“const”是沒有實現(xiàn)的保留字?
同樣,這主要是為了避免混淆。其他關(guān)鍵字提供了等效的功能,并且因為該概念不適合面向?qū)ο蟮姆独?。或者用外行的話來說,Java
不需要它。
在大多數(shù)情況下,因為 JDK 不需要它,“const”在 Java
中沒有實現(xiàn)。其他語言特性提供聲明常量或提供不變性的能力。該語言的提供者希望避免混淆,并決定即使是善意的開發(fā)人員也不能在他們的代碼中使用該術(shù)語。很多人都會選擇報java培訓(xùn)班學(xué)習(xí),可以更快速學(xué)到有用的知識和技能,節(jié)省很多時間和精力。