3 回答
TA貢獻1834條經驗 獲得超8個贊
這很簡單。
在第一個示例中,您將在靜態方法之外生成變量。salary1
在第二個示例中,您將在靜態方法中生成變量,該變量不是整個 Bike 類。bike
TA貢獻1866條經驗 獲得超5個贊
當我開始使用Java時,我遇到了同樣的問題,然后我把靜態放在任何地方,這是錯誤的選擇!
您的“靜態上下文”是靜態方法主(請注意方法名稱前面的“static”關鍵字)。靜態方法不是對象的方法,而是類的方法。靜態方法只能訪問類的字段(以 static 關鍵字為前綴的字段),這些類型的字段在此類的所有對象之間共享。
例如,嘗試:
public class Counter {
private static int cpt = 0;
public int incr() {
cpt = cpt + 1;
return cpt;
}
public static void main(String args[]) {
Counter counter1 = new Counter();
Counter counter2 = new Counter();
System.out.println(counter1.incr()); // print 1
System.out.println(counter2.incr()); // print 2
}
}
在這里,即使我只在“counter2”上調用了一次“incr”,它也返回“2”,因為“cpt”在counter1和counter2之間共享。
那么,如何解決您的問題。您必須訪問對象的字段(也稱為實例的字段)會拋出一個實例標識符,如“counter1.cpt”或在對象的方法中(如“incr()”)。這里有一個修復你的第一堂課:
public class MoneyTracker {
float salary1;
public void enterSalary1(float newValue){
salary1 = newValue;
}
public static void main(String[] args) {
MoneyTracker monthlySpend = new MoneyTracker();
monthlySpend.enterSalary1(1385.50f);
System.out.println(monthlySpend.salary1);
}
}
希望它能幫助你。
TA貢獻1871條經驗 獲得超8個贊
這是因為main方法是靜態的,并且您嘗試在那里引用非靜態字段(salary1),執行.在第二個示例中,您沒有在靜態 main 方法中引用任何非靜態字段,這就是為什么沒有錯誤的原因。使用 getters/setters。希望我幫助了:)System.out.println(salary1)
添加回答
舉報
