首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Eclipse 中「定義時賦值」報錯的真相:代碼無誤,環境配置問題

     編輯:程式設計綜合問答

問題代碼片段

class A {
    private static int cnt = 0;
    public void f() { cnt++; }
    static int out(int i) { return cnt; }
}
public class Main {
    public static void main(String[] args) {
        A aa1 = new A();
        A aa2 = new A();
        System.out.println(A.out(1)); // 輸出 2
    }
}

提問者認為 new A() 應自動調用無參構造器並執行 f() 導致計數增加,實際上構造器默認不調用 f(),且代碼邏輯本身無誤。

運行結果驗證

在 Eclipse (Mars) 中直接運行上述代碼,控制台正常輸出 2。說明:

  • 靜態變量 cnt 屬於類,兩次 new A() 不會重置。
  • 未顯式調用 f() 時 cnt 仍為 0,但示例中 out(1) 直接返回 cnt,輸出 0 才符合邏輯。提問者可能誤以為構造器會自動調用 f()。

常見誤區與排查

  1. 構造器不會自動調用普通方法:除非在構造器內顯式調用 f()。
  2. Eclipse 編譯報錯多為項目配置問題:如 JDK 版本不匹配、項目未正確構建、源碼編碼不一致等。建議 Project → Clean 並重新構建。
  3. 靜態導入與包名衝突:包名使用中文(用static輸出對象的個數)雖合法但不規範,建議改為英文。

最佳實踐

class Counter {
    private static int count = 0;
    public Counter() { count++; } // 構造器中計數
    public static int getCount() { return count; }
}
public class Demo {
    public static void main(String[] args) {
        new Counter();
        new Counter();
        System.out.println(Counter.getCount()); // 2
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved