天天看點

詳解Java中static關鍵字和final關鍵字的功能

摘要:static關鍵字和final關鍵字是Java語言的核心,深入了解他們的功能非常重要。

本文分享自華為雲社群《Java: static關鍵字與final關鍵字》,原文作者:唐裡 。

static關鍵字和final關鍵字是Java語言的核心,深入了解他們的功能非常重要。

靜态變量

無論你寫了一個多大的程式,都會遇到static關鍵字,像這樣,在main()方法裡:

詳解Java中static關鍵字和final關鍵字的功能

簡而言之,帶有 static 關鍵字的字段屬于類,它們是類方法和變量。

當你在課堂上或者書本上學習面向對象程式設計時,可能會碰到類似于藍圖的東西。我們做個類比,有一個房子的藍圖( 這個藍圖可以建很多房子,就像你可以用這個類建立很多對象/執行個體一樣) ,在這個藍圖上,可能有描述藍圖本身而不是房子的資訊。是以,如果一個類中有一個靜态變量,那麼該變量将儲存有關該類本身的資訊。我希望這個類比可以使你更容易了解,如果不能,看看下面的例子:

詳解Java中static關鍵字和final關鍵字的功能

沒有關鍵字 static 的變量稱為執行個體變量,是以 userName 變量被認為是 User 類的執行個體變量。

現在,我們的main()方法是:

詳解Java中static關鍵字和final關鍵字的功能

注意設定執行個體變量“使用者名”和靜态變量描述的差別。當我們設定執行個體變量“使用者名”時,我們首先建立 User 類的對象/執行個體,然後設定它的 userName 變量。為了設定靜态變量‘ description’,我們通過‘ User.setDescription (“ My User Class”) ;’在類本身上設定它。是以,通過将“ description”變量設定為 static,每個類隻有一個這樣的字段,而有許多“ userName”字段(每個建立的對象有一個)。

它是如何起作用的?實際上,類變量的一個實際用途是不停計算我們擁有的類的執行個體數。例如:

詳解Java中static關鍵字和final關鍵字的功能

我們在 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中static關鍵字和final關鍵字的功能
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

點選關注,第一時間了解華為雲新鮮技術~