1. 程式人生 > >java中static關鍵字淺談

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...