Java中static關鍵字的作用
static關鍵字主要有兩種作用:
第一,為某特定資料型別或物件分配單一的儲存空間,而與建立物件的個數無關。
第二,實現某個方法或屬性與類而不是物件關聯在一起
具體而言,在Java語言中,static主要有4中使用情況:成員變數、成員方法、程式碼塊和內部類
(1)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程式碼塊在類中是獨立於成員變數和成員函式的程式碼塊的。注意:這些static程式碼塊只會被執行一次
(4)static與final結合使用表示的意思:
對於變數,若使用static final修飾,表示一旦賦值不能修改,並且通過類名可以訪問。
對於方法,若使用static final修飾,表示該方法不可被覆蓋,並且可以通過類名直接訪問。
public class Test{
public static int testStatic(){
static final int i=0;
System.out.println(i++);
}
public static void main(String[] args){
Test test=new Test();
test.testStatic();
}
}
上述程式執行的結果:
A 0 B 1 C 2 D 編譯失敗
答案:D
在Java語言中,不能在成員函式內部定義static變數
轉自:http://blog.csdn.net/jsqfengbao/article/details/44724219