摘要:static關鍵字和final關鍵字是Java語言的核心,深入理解他們的功能非常重要。
本文分享自華為雲社區《Java: static關鍵字與final關鍵字》,原文作者:唐里 。
static關鍵字和final關鍵字是Java語言的核心,深入理解他們的功能非常重要。
靜態變量
無論你寫了一個多大的程序,都會遇到static關鍵字,像這樣,在main()方法里:
簡而言之,帶有 static 關鍵字的字段屬於類,它們是類方法和變量。
當你在課堂上或者書本上學習面向對象編程時,可能會碰到類似於藍圖的東西。我們做個類比,有一個房子的藍圖( 這個藍圖可以建很多房子,就像你可以用這個類創建很多對象/實例一樣) ,在這個藍圖上,可能有描述藍圖本身而不是房子的信息。因此,如果一個類中有一個靜態變量,那么該變量將保存有關該類本身的信息。我希望這個類比可以使你更容易理解,如果不能,看看下面的例子:
沒有關鍵字 static 的變量稱為實例變量,因此 userName 變量被認為是 User 類的實例變量。
現在,我們的main()方法是:
注意設置實例變量“用戶名”和靜態變量描述的區別。當我們設置實例變量“用戶名”時,我們首先創建 User 類的對象/實例,然后設置它的 userName 變量。為了設置靜態變量‘ description’,我們通過‘ User.setDescription (“ My User Class”) ;’在類本身上設置它。因此,通過將“ description”變量設置為 static,每個類只有一個這樣的字段,而有許多“ userName”字段(每個創建的對象有一個)。
它是如何起作用的?實際上,類變量的一個實際用途是不停計算我們擁有的類的實例數。例如:
我們在 User 類中添加了一個‘ count’靜態變量,並在構造函數中增量它。每次我們創建 User 類的實例時,都會有一個變量來跟蹤創建了多少個實例。
最后要注意的是,靜態變量不是用值初始化的,它們是用默認值“自動”初始化的,默認值是:
primitive integers(long, short etc): 0
primitive floating points(float, double): 0.0
boolean: false
object references: null
0 primitive floating points (float,double) : 0.0 boolean: false object references: null
靜態方法
靜態方法屬於類方法。需要注意的一件重要事情是,靜態方法不能訪問實例變量; 它們只能訪問其他靜態字段。如果你試圖通過一個實例方法訪問一個靜態字段,不要擔心,編譯器會通過一個報錯提醒你:
non-static variable this cannot be referenced from a static context
這是因為實例變量在實例初始化之前不存在;而靜態變量是在類中聲明時創建的。另一方面,實例方法可以訪問靜態變量。
可訪問性: 只有當靜態字段或方法僅供類內使用時,才能將其標記為 private。如果要在類之外使用它們,那么它們必須被標記為 protected 或 public。
final關鍵字
簡單來說,final 關鍵字就是 Java 將變量標記為常量的版本。Final 關鍵字可以防止變量被重新分配一個不同的值,因此一旦分配了一個值,就不能將其重新分配給其他變量。當你聲明一個變量並給它貼上最終的標簽時,它也必須被初始化。
編碼規范:在 Java 中,和許多其他語言一樣,常量總是全部大寫。舉個例子, π (表示圓周長與其直徑的比值),如果你寫成PI將導致以下錯誤:
java: cannot assign a value to final variable PI
在 Math 類中,PI 變量被標記為 final 關鍵字成為常量,而帶有 final 關鍵字的變量不能被重新賦值。在methods上使用 final 關鍵字可以防止它們被重寫,並在類級別上使用 final 關鍵字可以防止該類擁有子類(其他類不能從具有 final 關鍵字的類繼承)。
以上就是本文的全部內容,希望對你有所幫助。
原文鏈接:https://suprun-anton6.medium.com/java-static-and-final-keywords-66a3f8b3db8a