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

摘要:static關鍵字和final關鍵字是Java語言的核心,深刻理解他們的功能很是重要。

本文分享自華爲雲社區《Java: static關鍵字與final關鍵字》,原文做者:唐裏 。java

static關鍵字和final關鍵字是Java語言的核心,深刻理解他們的功能很是重要。編程

靜態變量

不管你寫了一個多大的程序,都會遇到static關鍵字,像這樣,在main()方法裏:函數

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

當你在課堂上或者書本上學習面向對象編程時,可能會碰到相似於藍圖的東西。咱們作個類比,有一個房子的藍圖( 這個藍圖能夠建不少房子,就像你能夠用這個類建立不少對象/實例同樣) ,在這個藍圖上,可能有描述藍圖自己而不是房子的信息。所以,若是一個類中有一個靜態變量,那麼該變量將保存有關該類自己的信息。我但願這個類比可使你更容易理解,若是不能,看看下面的例子:this

沒有關鍵字 static 的變量稱爲實例變量,所以 userName 變量被認爲是 User 類的實例變量。編碼

如今,咱們的main()方法是:url

注意設置實例變量「用戶名」和靜態變量描述的區別。當咱們設置實例變量「用戶名」時,咱們首先建立 User 類的對象/實例,而後設置它的 userName 變量。爲了設置靜態變量‘ description’,咱們經過‘ User.setDescription (「 My User Class」) ;’在類自己上設置它。所以,經過將「 description」變量設置爲 static,每一個類只有一個這樣的字段,而有許多「 userName」字段(每一個建立的對象有一個)。spa

它是如何起做用的?實際上,類變量的一個實際用途是不停計算咱們擁有的類的實例數。例如:.net

咱們在 User 類中添加了一個‘ count’靜態變量,並在構造函數中增量它。每次咱們建立 User 類的實例時,都會有一個變量來跟蹤建立了多少個實例。3d

最後要注意的是,靜態變量不是用值初始化的,它們是用默認值「自動」初始化的,默認值是:

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

 

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

相關文章
相關標籤/搜索