java中static關鍵字淺談
基本規則
Java中static關鍵字修飾的成員變數和方法是靜態變數和方法,使用規則如下:
1. static方法只能呼叫static方法或static變數,不能呼叫非static方法或非static變數,換句話說就是,靜態方法只能呼叫靜態方法或靜態變數,不能呼叫非靜態方法或非靜態變數。注:在靜態方法中可以通過建立物件,通過建立的物件呼叫該物件的非靜態方法。
2.static方法中不能使用this或super關鍵字。
3.static不能用於修飾區域性變數,另外構造器不是靜態方法,因為構造器裡可以引用this和super關鍵字。
初始化時間
靜態變數和靜態程式碼塊在類初次載入時會被初始化,且只能被初始化一次。(靜態程式碼塊不能寫在方法體裡面)
注:當子類沒有與其父類同名的static變數或方法時,子類也能呼叫父類的static變數或方法,但是子類並沒有繼承父類中static修飾的變數和方法。因為static修飾的變數和方法是屬於父類本身的。
例如:
public class StaticTest {//父類
public static String superStr = "father==";//靜態變數
public static String getSuperStr() {//靜態方法
String superS = "invoke Super static method...";
return superS;
}
}
public class ChildStaticTest extends StaticTest{//子類
//子類中沒有與父類同名的static變數和static方法
}
public class MainTest {//測試類
public static void main(String[] args) {
System.out.println(ChildStaticTest.superStr);
System.out.println(ChildStaticTest.getSuperStr());
ChildStaticTest cst = new ChildStaticTest();
System.out.println(cst.superStr);
System.out.println(cst.getSuperStr());
}
}
輸出結果是:
father==
invoke Super static method...
father==
invoke Super static method...
假如子類中存在與父類同名的static變數和static方法
public class ChildStaticTest extends StaticTest{
public static String superStr = "child==";
public static String getSuperStr() {
String childS = "invoke child static method...";
return childS;
}
}
輸出結果是:
child==
invoke child static method...
child==
invoke child static method...