編譯報錯:「無法從靜態上下文中引用非靜態變量」。典型場景:在 main 靜態方法中直接訪問實例變量或調用非靜態方法。
public class Hitest {
int k = 99999; // 實例變量
public static void main(String args[]) {
System.out.println(k); // 編譯錯誤:靜態方法訪問非靜態變量
}
}
this 引用,無法知道操作哪個對象的成員。static int k = 99999; // 類變量
public static void main(String args[]) {
Hitest obj = new Hitest(); // 實例化
System.out.println(obj.k); // 通過對象訪問
}
public void printK() {
System.out.println(k); // 非靜態方法可直接訪問實例變量
}
public static void main(String args[]) {
new Hitest().printK();
}
原問題中的 switch 調用 sum、minus 等方法,若這些方法是非靜態的,同樣需要通過對象調用:
Hitest calculator = new Hitest();
switch(ope) {
case "+": res = calculator.sum(num1, num2); break;
// ...
}