1.靜態方法優先於物件被建立
2.非靜態方法通過物件建立
3.靜態方法在記憶體中建立後,還沒有建立物件,所以不能呼叫非靜態方法和變數。
//null 型別呼叫靜態方法,輸出什麼?
public class test
public static void main(string args)
}問輸出什麼?
//輸出是print()
因為:1.print()是靜態方法,不用物件也可以呼叫,((test)null).print() 這種格式也可以。
2.null 可以轉換成任意引用型別
3.((test)null).print() 相當於 test t = null; t.print();
4.如果將print()方法的修飾符去掉,執行時會報空指標異常,因為是在靜態方法中呼叫非靜態方法。
靜態方法不能呼叫非靜態方法的原因
靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在,當你建立乙個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依賴於物件的呼叫,它是通過 類...
為什麼靜態方法不能呼叫非靜態方法?
1.靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在。2.當你建立乙個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依賴於物件的呼叫,它是...
java靜態方法不能呼叫非靜態方法的原因
靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在,當你建立乙個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依賴於物件的呼叫,它是通過 類...