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

Java final 類與實例變數行為解析:為何 position 始終為 0?

     編輯:程式設計綜合問答

程式碼情境

public final class Test {
    private long position = -1;
    public void method() {
        position++;
    }
}

問題:A 呼叫 method() 後 position 為何值?B 再次呼叫後又為何值?

核心解析

結論:每次呼叫 method() 後,position 均為 0。

  • final 修飾類僅表示「不可被繼承」,不影響實例變數的生命週期。
  • 每次建立 new Test() 實例時,position 都會初始化為 -1。
  • 呼叫 method() 時執行 position++,值變為 0。
  • 若 A、B 使用的是同一個實例,則第二次呼叫會得到 1;但題目隱含「每次訪問都新建實例」或「靜態語境下重置」,故結果恆為 0。

常見誤區

許多初學者誤以為 final class 會讓成員變數「只初始化一次」,實際上 final 對類的語意僅限制繼承關係,實例欄位仍遵循一般物件建構規則。

驗證建議

在 method() 中加入列印:

public void method() {
    System.out.println("Before: " + position);
    position++;
    System.out.println("After: " + position);
}

觀察多次呼叫的輸出,即可釐清實例建立與變數修改的時序。

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