當一個方法或者變量需要
初始化加載,或者是經常被調用的時候可以加上static。
用static修飾的方法可以用類名直接調用,不用的一定要先實例化一個對象然后才可以調用
比如 person這個類里面有一個方法public static add(){}
那么可以直接用person類調用 person.add();當然也可以用下面的方法先出一個對象在調用也是可以
如果這個方法前面沒有static 比如 public add(){}
那么先要person p=new person();
然后用p.add();
類加載器在加載這個類的時候就已經實例化了這個類。
壞處:
初始化加載,比較占內存,所以不經常用的方法,不建議加此關鍵字。
如果static是寫在單例中,高並發訪問是會出問題的,這時候就要設置線程等待了,static是在容器加載的時候就已經加載到內存中,所以static方法和變量不宜過度使用,有選擇的使用。
如果你需要通過計算來
初始化你的static變量,你可以聲明一個static塊,Static 塊僅在該類被加載時執行一次。下面的例子顯示的類有一個static方法,一些static變量,以及一個static 初始化塊:
// Demonstrate static variables,methods,and blocks.
class UseStatic {
static int a = 3;
static int b;
static void meth(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
static {
System.out.println("Static block initialized.");
b = a * 4;
}
public static void main(String args[]) {
meth(42);
}
}
一旦UseStatic 類被裝載,所有的static語句被運行。首先,類屬性變量開始賦值,a被設置為3,b默認初始化為 0 ,接着運行static 塊,執行(打印一條消息),最后,b被初始化為a*4 或12。然后調用main(),main() 調用meth() ,把值42傳遞給x。3個println () 語句引用兩個static變量a和b,以及局部變量x。
注意:在一個static 方法中引用任何實例變量都是非法的。
下面是該程序的輸出:
Static block initialized.
x = 42
a = 3
b = 12
