1. 程式人生 > >java 中static關鍵字作用

java 中static關鍵字作用

static關鍵字主要有兩種作用:

第一,為特定資料型別或物件分配單一的存貯空間,而與建立物件的個數無關。第二,希望某個方法或屬性與類而不是物件關聯在一起,也就是說,
在不建立物件的情況下就可以通過類來直接呼叫方法或使用類的屬性。具體而言,static在java中主要有四種使用情況:成員變數、成員方法、程式碼塊及內部類。
(1)static成員變數

雖然java語言中沒有全域性的概念,但可以通過static關鍵字來達到全域性的效果。java類提供了兩種型別的變數:用static關鍵字修飾的靜態變數和沒有static關鍵字修飾的例項變數。靜態變數
屬於類,在記憶體中只有一個副本(所有勢力都指向同一個記憶體地址)。只要靜態變數所在的類被載入,這個靜態類就會被分配空間,因此就可以被使用。對靜態變數的引用有兩種方式,分別為“類.靜態變數”和“物件.靜態變數”。

例項變數屬於物件,只有物件被建立後,例項變數才會被分配空間,才能被使用,他在記憶體中存在多個副本,只能用“物件.靜態變數”的方式來引用。

靜態變數只有一個,被類所擁有,所有的物件都共享這個靜態變數,而例項物件與具體物件有關。

(2) static成員方法
與變數類似,java類同時也提供了static方法與非static方法。static方法是類的方法,不需要建立物件就可以被使用,而非static方法是物件的方法,只有物件被創建出來後才可以被使用。

static 方法中不能使用this和super關鍵字,不能呼叫非static方法,只能訪問所屬類的靜態成員變數和成員方法,因為當static方法被呼叫的時候,這個類的物件可能還沒有被建立,即使已經被建立,
也無法確定呼叫哪個物件的方法。同理static方法也不能訪問非static型別的變數。

static的一個很重要的的用途的是實現單例模式。單例模式的特點是該類只能有一個例項,為了實現這功能,必須隱藏類的構造方法,即把構造方法申明為private,並提供一個建立物件的方法。由於構造方法被申明為private,外界無法直接建立這個型別物件,只能通過該類提供的方法來獲取類的物件,要達到這樣的目的只能把建立
物件的方法生明為static:

class Singleton{
    private static Singleton instance=null;
    private Singleton(){}
    public static Singleton getInstance
(){ if (instance=null){ instance=new Singleton(); } return instance; } }

(3) static 程式碼塊

static程式碼塊在類中是獨立與成員變數和成員函式的程式碼塊,他不在任何一個方法體內,JVM在載入裡的時候會執行static程式碼塊,如果有多個static程式碼塊,JVM將會按順序來執行,static程式碼塊經常會被用來初始化靜態變數,需要注意的是static程式碼塊只會被執行一次。

(4)static內部類

static內部類是指被申明為static的內部類,他可以不依賴於外部類例項物件而被例項化,而通常的內部類需要外部類例項化後才能例項化。靜態內部類不能與外部類有相同的名字,不能訪問外部類的普通成員變數,只能訪問外部類中的靜態成員和靜態成員方法,只有內部類才能被申明為static。