如何在 Java 中建立一個只能設定一次但不是 final 的變數?


一旦初始化 final 變數,就無法再修改其值。換句話說,只能為 final 變數分配一次值。如果你嘗試將值分配給 final 變數,將會生成編譯時錯誤。

示例

 動態演示

public class FinalExample {
   final int j = 100;
   public static void main(String args[]){
      FinalExample obj = new FinalExample();
      obj.j = 500;
      System.out.println(obj.j);
   }
}

編譯時錯誤

FinalExample.java:6: error: cannot assign a value to final variable j
   obj.j = 500;
      ^
1 error

實現“final”功能

不實際使用 final 關鍵字實現 final 功能 −

將變數設為 private 並使用 setter 方法為其設定值,這樣,如果你嘗試第二次呼叫它,它應該設定先前值或丟擲異常。

示例

 動態演示

public class FinalExample {
   private Integer num;
   public void setNum(int num){
      this.num = this.num == null ? num : this.num;
   }
   private String data;
   public void setData(String data) {
      this.data = this.data == null ? data : demo();
   }
   public String demo() {
      String msg = "You cannot set value to the variable data for the second time";
      throw new RuntimeException(msg);
   }
   public static void main(String args[]){
      FinalExample obj = new FinalExample();
      obj.setNum(200);
      System.out.println(obj.num);
      obj.setNum(500);
      System.out.println(obj.num);
      obj.setData("hello");
      obj.setData("sample data");
   }
}

輸出

200
200
Exception in thread "main" java.lang.RuntimeException: You cannot set value to the variable data for the second time
at SEPTEMBER.remaining.FinalExample.demo(FinalExample.java:15)
at SEPTEMBER.remaining.FinalExample.setData(FinalExample.java:12)
at SEPTEMBER.remaining.FinalExample.main(FinalExample.java:26)

更新於: 2019-10-11

1 千次+瀏覽

開啟你的 職業生涯

完成課程即可獲得認證

開始
廣告