1. 程式人生 > >靜態方法不能呼叫非靜態方法的原因

靜態方法不能呼叫非靜態方法的原因

1.靜態方法優先於物件被建立

2.非靜態方法通過物件建立

3.靜態方法在記憶體中建立後,還沒有建立物件,所以不能呼叫非靜態方法和變數。

//null 型別呼叫靜態方法,輸出什麼?

public class Test{

private static void Print(){
System.out.println("Print()");
}

public static void main(String[] args) {

((Test)null).Print();

}

}

問輸出什麼?

//輸出是Print()

因為:1.Print()是靜態方法,不用物件也可以呼叫,((Test)null).Print() 這種格式也可以。

          2.null 可以轉換成任意引用型別

          3.((Test)null).Print() 相當於 Test t = null; t.Print();

          4.如果將Print()方法的修飾符去掉,執行時會報空指標異常,因為是在靜態方法中呼叫非靜態方法。