為什麼我們不能在 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 中編譯相同的程式,則會生成以下訊息。
廣告