Java 靜態方法static調用非靜態方法non-static

非靜態方法可直接調用靜態方法

而靜態方法(static) 無法直接調用非靜態方法(non-static),想要調用的話有以下兩個做法:

  • 把非靜態方法改成靜態方法
  • 使用 <類名.方法名> 調用非靜態方法
public class Static_test {
	
	public static void main(String[] args) {
		//Method1();//錯誤調用方法 無法直接調用
		Method2();//靜態方法可直接調用靜態方法
		Static_test s = new Static_test();//類名爲Static_test
		s.Method1();//使用<類名.方法名>可調用非靜態方法
	}

	public void Method1() {//非靜態方法 non-static
		System.out.println("11111");
        Method2();//非靜態方法可直接調用靜態方法
	}
	
	public static void Method2() {//非靜態方法 static
		System.out.println("22222");
	}
}

靜態方法是屬於類的,而普通方法是屬於對象的

因此靜態方法會隨着類的加載而被加載,即屬於類的靜態方法可以在對象不存在的時候就能訪問到,而普通方法必須先new一個對象才能用這個對象訪問,所以在static方法內部無法直接調用non-static方法。

由於static方法在裝載class時首先完成,比構造方法早,此時non-static屬性和方法還沒有完成初始化,程序最終都是在內存中執行,變量只有在內存中佔有一席之地時纔會被訪問,類的靜態成員(變態和方法)屬於類本身,在類加載的時候就會分配內存,可以通過類名直接去訪問,非靜態成員(變量和方法)屬於類的對象,所以只有在類的對象創建(創建實例)的時候纔會分配內存,然後通過類的對象去訪問。因此可知,在一個類的靜態成員中去訪問非靜態成員之所以會出錯是因爲在類的非靜態成員不存在的時候靜態成員就已經存在了,訪問一個內存中不存在的東西當然會出錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章