為什麼我們不能在 Java 的 try/catch 程式碼塊中初始化 static final 變數?


在 Java 中,您可以宣告三種類型的變數,即例項變數、靜態變數和區域性變數。

  • 區域性變數 - 在方法、建構函式或程式碼塊內部定義的變數稱為區域性變數。變數將在方法內部宣告和初始化,並在方法執行完成後被銷燬。
  • 類(靜態)變數 - 類變數是在類內部、任何方法外部,使用 static 關鍵字宣告的變數。

try 程式碼塊中的靜態方法

同樣,靜態變數屬於類,可以在類的任何地方訪問,這與區域性變數的定義相矛盾。因此,不允許在方法、程式碼塊或建構函式內部宣告靜態變數。但是,如果您嘗試在程式碼塊內宣告靜態變數,則會生成編譯時錯誤。

示例

在下面的 Java 示例中,我們嘗試在 try 程式碼塊中宣告一個 String 變數 path。

import java.io.File;
import java.io.FileInputStream;
public class Example {
   public static void main(String args[]){
      System.out.println("Hello");
      try{
         static String path = "my_file";
         File file =new File(path);
         FileInputStream fis = new FileInputStream(file);
      }catch(Exception e){
         System.out.println("Given file path is not found");
      }
   }
}

編譯時錯誤

編譯上述程式時,會生成以下錯誤。

Example.java:7: error: illegal start of expression
   static String path = "my_file";
   ^
1 error

如果您在 Eclipse 中編譯相同的程式,則會生成以下訊息。

更新於: 2019年8月7日

883 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告