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

Java 靜態方法無法直接訪問非靜態成員的正確解決姿勢

     編輯:程式設計疑難解答

錯誤代碼

class Work {
    static int num = 3;
    public static void main(String[] args) {
        Work t = new Work();
        t.num = 5;
        method(t);  // 傳遞對象給靜態方法
        System.out.println(t.num);
    }
    public static void method(Work t) { t.num = 6; }
}

原因

靜態方法 `method` 屬於類,不屬於實例,**無法直接訪問非靜態成員**(若不傳對象引用)。雖然此處通過參數傳入實例 `t` 可行,但屬於「繞彎路」。

改進:改為實例方法

class Work {
    static int num = 3;
    int instanceNum = 5;  // 非靜態成員
    public static void main(String[] args) {
        Work t = new Work();
        t.instanceNum = 5;
        t.method();  // 調用實例方法
        System.out.println(t.instanceNum);
    }
    public void method() {  // 非靜態
        this.instanceNum = 6;
    }
}

實例方法隱含 `this` 參考,自然訪問實例字段,設計更符合面向對象原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved