? ? 這個問題很困擾人,一直也沒注意,但是今天決定好好研究研究。
static關(guān)鍵字
? ? ? static 關(guān)鍵字可以用來修飾類的變量,方法和內(nèi)部類。static 是靜態(tài)的意思,也是全局的意思它定義的東西,屬于全局與類相關(guān),不與具體實例相關(guān)。就是說它調(diào)用的時候,只是 ClassName.method(),而不是 new ClassName().method()。new ClassName()不就是一個對象了嗎?static 的變量和方法不可以這樣調(diào)用的。它不與具體的實例有關(guān)。
final關(guān)鍵字
final 關(guān)鍵字有三個東西可以修飾的。修飾類,方法,變量。? 詳細(xì)解釋一下:
(1)在類的聲明中使用 final
使用了 final 的類不能再派生子類,就是說不可以被繼承了。有些 java 的面試題里面,問 String 可不可以被繼承。答案是不可以,因為 java.lang.String是一個 final 類。這可以保證 String 對象方法的調(diào)用確實運行的是 String 類的方法,而不是經(jīng)其子類重寫后的 方法。
(2)在方法聲明中使用 final
被定義為 final 的方法不能被重寫了,如果定義類為 final 的話,是所有的方法都不能重寫。而我們只需要類中的某幾個方法,不可以被重寫,就在方法前加 final 了。而且定義為 final 的方法執(zhí)行效率要高的啊。
(3)在變量聲明中使用 final
這樣的變量就是常量了,在程序中這樣的變量不可以被修改的。修改的話編譯器會抱錯的。而且執(zhí)行效率也是比普通的變量要高。final 的變量如果沒有賦予初值的話,其他方法就必需給他賦值,但只能賦值一次。
注意:子類不能重寫父類的靜態(tài)方法哦,也不能把父類不是靜態(tài)的重寫成靜態(tài)的方法。想隱藏父類的靜態(tài)方法的話,在子類中聲明和父類相同的方法就行了。
static final為什么要一起用:
final與static final的區(qū)別是:final在一個對象類唯一,static final在多個對象中都唯一;
一個既是static又是final的域只占據(jù)一段不能改變的存儲空間,只有一份。
java中final關(guān)鍵字的使用及static final 和final的區(qū)別 - iamdll的專欄
- 博客頻道 - CSDN.NET
static和final的區(qū)別(轉(zhuǎn)載) - The灬Answer - 博客園
java中final關(guān)鍵字的使用及static final 和final的區(qū)別 - iamdll的專欄
- 博客頻道 - CSDN.NET