1. 程式人生 > 其它 >2021/9/19-java靜態方法與非靜態變數

2021/9/19-java靜態方法與非靜態變數

問題來源:

在開學測試一個論文提交系統中頻繁出現一個報錯提示:Cannot make a static reference to the non-static method mainFrame() from the type paperManagement

為解決這一問題,我找到了以下答案(參考來源:CSDN 原創:彈指江山)

java靜態方法中不能引用非靜態變數

靜態方法和靜態變數是屬於某一個類,而不屬於類的物件。

靜態方法可以在沒有建立例項時使用,而申明為非靜態的成員變數是一個物件屬性,所以它只有在物件存在時引用。因此,如果在物件未建立例項時在靜態方法中呼叫了非靜態成員方法就是非法的,所以編譯器會在這時報出錯誤。總而言,靜態方法可以不用建立物件就呼叫,非靜態方法則必須通過物件的例項來進行呼叫,因此如果在靜態方法中不通過例項就引用非靜態方法,引用的是哪個物件的非靜態方法就不確定,所以不能執行。只要不是static修飾的方法,必須要通過物件來進行引用。

如:

class test

{

int a=3; //非靜態變數

public static void main(String[] args) //靜態方法

{

System.out.print(a); //成員變數不能直接呼叫,無法呼叫非靜態變數a(a cannot be resolved to a variable)

}

}

因為靜態方法的呼叫不是通過例項物件進行的,所以在靜態方法中沒有this指標,不能訪問所屬類的非靜態變數和方法,只能訪問方法體內的區域性變數、自己的引數和靜態變數,所以在static的主函式中呼叫非static的方法就是錯的,應把方法放到另一個類,建立物件再呼叫,因為這個方法不是類的,即不是屬於類的,而是屬於具體的一個例項物件的。

記:

用static修飾的成員是屬於類的,在static的方法裡可以用類名直接呼叫,而不需要static修飾的成員是屬於具體例項物件的,需要用物件名呼叫,且在static的方法裡不可以呼叫。