為什麼在Java中,在try塊中定義的變數不能在catch或finally塊中使用?
Java中的類將包含三種變數,即靜態(類)變數、例項變數和區域性變數。
例項變數 − 這些變數屬於類的例項(物件)。它們在類中宣告,但在方法之外。當類被例項化時,它們會被初始化。可以從該特定類的任何方法、建構函式或塊中訪問它們。
類/靜態變數 − 類/靜態變數屬於類,就像例項變數一樣,它們在類中宣告,在任何方法之外,但使用static關鍵字。
它們在編譯時可用,你可以在例項化類之前/無需例項化類即可訪問它們,在整個類中只有一個靜態欄位的副本可用,即靜態欄位的值在所有物件中都相同。可以使用static關鍵字定義靜態欄位。
區域性變數 − 這些變數屬於並在方法/塊/建構函式中宣告/定義。這些變數的作用域位於方法(或塊或建構函式)內,並在其執行後被銷燬。
try塊中的變數
因此,如果在try塊中宣告一個變數(在任何塊中都是如此),它將是該特定塊的區域性變數,變數的生命週期在塊執行後結束。因此,無法訪問在塊中宣告的任何變數,在塊外部。
示例
在下面的示例中,我們聲明瞭一個名為result的變數,並嘗試在finally塊中訪問它,編譯時會產生編譯時錯誤。
import java.util.Arrays;
import java.util.Scanner;
public class ExceptionExample {
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
int[] arr = {10, 20, 30, 2, 0, 8};
System.out.println("Array: "+Arrays.toString(arr));
System.out.println("Choose numerator and denominator(not 0) from this array (enter positions 0 to 5)");
int a = sc.nextInt();
int b = sc.nextInt();
try {
int result = (arr[a])/(arr[b]);
}catch(Exception e) {
System.out.println("exception occured");
} finally {
System.out.println("This is finally block");
System.out.println("Result of "+arr[a]+"/"+arr[b]+": "+result);
}
}
}輸出
ExceptionExample.java:21: error: cannot find symbol
System.out.println("Result of "+arr[a]+"/"+arr[b]+": "+result);
^
symbol: variable result
location: class ExceptionExample
1 error
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP