1. 程式人生 > 其它 >詳解詳解Java中static關鍵字和final關鍵字的功能

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

摘要: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

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