Java中final與static的使用

Final關鍵字

根據使用環境不一樣,final的含義會有細微的區別,但一般是指沒法改變的內容。final關鍵字能夠修飾變量、方法和類。 this

Final變量

final數據是用來向編譯器告知變量是恆定不變的。對使用基本類型數據的常量,在定義時必須對其賦值。一個既是static又是final的域只會佔據一段不能改變的存儲空間。當對象使用引用而不是基本類型時使用final修飾,final使引用恆定不變,但其引用的內容可變。 spa

空白的final容許的,但在使用前必須初始化,一旦初始化,將不能再更改。通常應用於類中,在定義處或構造方法中初始化。方法的參數也能夠被final修飾,final參數不能更改參數引用指定的對象,主要用來向匿名內部類傳遞數據。 設計

接口中定義的域不能是空白final的,由於接口中的域都是static final,因此必須在定義時進行初始化。其餘位置的static final也同樣。 對象

Final方法

final方法的使用緣由有兩個: 繼承

  1. 鎖定方法,防止繼承類修改和覆蓋方法。
  2. 增強效率,將調用轉換爲內嵌,該條僅限於小方法使用。

類中全部私有方法都隱式的指定爲final的,雖然能夠給私有方法加final修飾,但不會有任何意義。 接口

Final類

final類表示該類沒法被繼承。final類中的域可根據選擇是否成爲final域,但類中的方法都將隱式的指定爲final的,對每一個方法添加final再也不必要。 內存

Static關鍵字

static關鍵字能夠修飾變量和方法,主要用於通知編譯器將目標設定爲靜態惟一的。 編譯器

Static變量

static變量經常使用於類中的域。不論類產生了多少對象,static域在內存中只有一份,因此static域也被稱爲類變量。任何方法均可以直接訪問static域。與static變量相對應的非static變量被成爲實例變量。static變量通常經過「類名.變量名」的方法進行訪問,而不用this,由於其不從屬於任何實例。 編譯

static變量與final變量不能混爲一談,static變量在內存中惟一,可是是可修改的;final變量在內存中不惟一,但不可修改。 效率

Static方法

static方法與static變量很類似。static方法在內存中也僅有一份,放置在類的內存裏,經過類調用,而不是實例。因此也稱爲類方法。static方法能夠訪問static變量,但不能訪問實例變量。通常在進行代碼設計時,static方法不該訪問類中的域及須要實例化的方法,而是應該專一於提供過服務。

Static類

通常狀況下是不容許定義靜態類的,只有在定義內部類的時候才能夠加上static關鍵字,將內部類變爲靜態類。

內部類是定義在類內部的類,對於Java來講,內部類很日常。在外部類的非靜態方法之外的任意位置建立內部類的對象只須要用直接new OuterClass.InnerClass()便可。但在外部環境中內部類對象是不能直接建立的,須要用OuterClassObject.new InnerClass()的形式來建立。但在外部環境用實例化靜態內部類時,則能夠直接用new OuterClass.InnerClass()來建立,但此時,靜態內部類不能與其外部類發生任何聯繫,此時的內部類應該稱爲嵌套類。關於內部類,將在從此的博文中詳細說明。

相關文章
相關標籤/搜索