[英]Non-static method cannot be referenced from static content
我無法編譯以下代碼:
public class Test {
public static void main (String [] args ){
int a = calcArea(7, 12);
System.out.println(a);
}
int calcArea(int height, int width) {
return height * width;
}
}
出現以下錯誤:
非靜態方法calcArea(int,int)不能從靜態內容中引用
這是什么意思? 我該如何解決這個問題..?
編輯:
根據您的建議,我創建了一個新的test()實例,如下所示:
public class Test {
int num;
public static void main (String [] args ){
Test a = new Test();
a.num = a.calcArea(7, 12);
System.out.println(a.num);
}
int calcArea(int height, int width) {
return height * width;
}
}
這個對嗎? 如果我這樣做有什么不同......
public class Test {
public static void main (String [] args ){
int a = calcArea(7, 12);
System.out.println(a);
}
static int calcArea(int height, int width) {
return height * width;
}
}
你的main是靜態的,所以你可以在沒有類測試實例的情況下調用它( new test()
)。 但它調用的calcArea
不是靜態的:它需要一個類的實例
你可以像這樣重寫它我猜:
public class Test {
public static void main (String [] args ){
int a = calcArea(7, 12);
System.out.println(a);
}
static int calcArea(int height, int width) {
return height * width;
}
}
正如評論所暗示的那樣,以及其他答案也表明,你可能不想走這條路線進行翻轉:你只會獲得靜態功能。 弄清楚代碼中實際應該是什么靜態,並且可能使自己成為一個對象並從那里調用函數:D
calcArea
不能是靜態的。 要在主類中使用其他方法,必須創建其實例。
public class Test {
public static void main (String [] args ){
Test obj = new Test();
int a = obj.calcArea(7, 12);
System.out.println(a);
}
int calcArea(int height, int width) {
return height * width;
}
}
Nanne建議的肯定是解決您的問題。 但是,我認為如果你現在養成這個習慣是謹慎的,而你在學習java的過程中,盡可能少地嘗試使用靜態方法,除非適用(實用方法,例如) 。 以下是您修改的代碼,用於創建Test實例並在Test對象上調用calcArea方法:
public class Test {
public static void main (String [] args ){
Test test = new Test();
int a = test.calcArea(7, 12);
System.out.println(a);
}
int calcArea(int height, int width) {
return height * width;
}
}
當你進一步使用java進行編碼時,可能會給你編寫的代碼開始處理對象,比如某種類型的多邊形對象,像calcArea這樣的方法屬於實例上下文,而不是靜態上下文,所以它可以運行關於對象的內部狀態。 這將使您的代碼更加面向對象,減少程序性。
如果將方法定義為靜態,則意味着您可以通過類名稱調用該方法,例如:
int a = Test.calcArea(7, 12);
沒有創建對象,
這里; Test是類的名稱,但要執行此操作, calcArea()方法必須是靜態的,或者您可以在對象上調用非靜態方法; 通過實例化類來創建對象,例如:
Test a = new Test();
這里“a”是Test和類型的對象
a.calcArea(7,12);
如果該方法沒有被定義為靜態可以被調用。
你知道靜態方法是什么嗎?
如果沒有,請查找,但簡短的回答是靜態方法不能(不能)訪問“this”,因為它沒有分配給該類的任何特定實例。 因此,您無法從靜態方法中調用實例方法(非靜態方法),因為計算機將如何知道該方法應在哪個實例上運行?
你的類calcArea應該聲明為static ,如果你想使用那個類,你必須先創建一個類的實例。 在類中,應該像有人建議的那樣返回類的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.