1. 程式人生 > >Java 中的編譯期常量是什麼?使用它有什麼風險?

Java 中的編譯期常量是什麼?使用它有什麼風險?

今天分享一道Java面試題 樓主看到這個面試題目的解答有點難弄懂 所以查閱了相關資料對其進行比較明瞭的解釋

首先上那一道面試題:

Java 中的編譯期常量是什麼?使用它有什麼風險?
      公共靜態不可變(public static final )變數也就是我們所說的編譯期常量,這裡的 public 可選的。實際上這些變數在編譯時會被替換掉,因為編譯器知道這些變數的值,並且知道這些變數在執行時不能改變。這種方式存在的一個問題是你使用了一個內部的或第三方庫中的公有編譯時常量,但是這個值後面被其他人改變了,但是你的客戶端仍然在使用老的值,甚至你已經部署了一個新的jar。為了避免這種情況,當你在更新依賴 JAR 檔案時,確保重新編譯你的程式。

  這裡的更新JAR檔案,重新編譯程式是為了更新你使用的編譯期常量的值!

  其實想簡單點:

       編譯期常量就是所謂的   public final static 常量。 由於在編譯時就確定了值,在使用的場合會直接寫成值。而不是直接到原來的類中讀取。
這樣會有一個問題。 如果  類 A 提供了常量  類B使用了常量。並都進行了編譯。然後,修改了類A的原始碼,呼叫系統進行編譯。系統發現類A是新的程式碼,
編譯了,類B是舊的程式碼,就不進行編譯,使用舊的類。所以導致類A的修改無法反映到類B中。這樣造成了讀取變數的值不同的風險。