首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 每日一題:靜態區塊執行順序與參數傳值機制分析(20170306)

     編輯:Java 相關知識

題目代碼

public class Ques0306 {
    static int i = 1;
    static { ++i; }          // 靜態區塊 1
    public static void main(String[] args) {
        increment(i, 3);
        display(i);
    }
    static void increment(int n, int m) { n += m; }
    static void display(int n) { System.out.println(n); }
    static { ++i; }          // 靜態區塊 2
}

問題

主程式輸出結果為何?

答案:1

詳細執行流程

  1. 類載入階段,按順序執行靜態初始化:
     static int i = 1; → i = 1
     static { ++i; } → i = 2
     static { ++i; } → i = 3
  2. main 執行:
     increment(i, 3) → 參數 n 接收 i 的**值複製** (3),方法內 n = 6,**不影響** 原 i。
     display(i) → 傳入 i (仍為 3),輸出 3。

關鍵知識點

  • 靜態區塊/變數初始化順序:依源碼從上到下依序執行。
  • 基本型別參數傳值:Java 只有傳值。基本型別傳值複製,方法內修改不影響實參。
  • 若 i 為物件 (如 Integer),傳遞的是引用值複製,仍無法改變原引用指向,但可修改物件內部狀態 (若可變)。

常見誤區

  • 以為 increment 會修改 i → 錯,基本型別不可變。
  • 忽略第二個靜態區塊 → 錯,類初始化會執行所有靜態區塊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved