問題:爲什麼static 會比程序入口先執行?
先來說static
static是靜態標誌,包括靜態代碼塊,靜態成員變量,靜態方法
在用static 方法前沒有創建任何對象,static是最先進行初始化的 ,所以有:
1. 靜態方法不能使用this關鍵字,因爲this指向當前對象。
2. 靜態方法內部不能調用非靜態方法和非靜態成員變量(非靜態方法內部可以調用靜態方法或靜態變量);
靜態方法的調用
1. 非靜態方法需要執行new來創建對象,數據存儲空間才被分配,其方法才供外界調用。
2. 靜態方法由於最先被初始化,最先被分配存儲空間,可以用類名.靜態方法名直接調用。
共享內存空間,直接用類名可以訪問
class StaticTest{
static int i =47;
}
即使創建2個StaticTest對象,i也只有一份存儲空間,這兩個對象共享同一個i。
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
st1.i和st2.i指向同一份儲存空間,因此他們有相同的值47,如果修改i的值st1.i和st2.i同時改變