为什么在try中定义的变量不能在catch中或在Java中最终使用?
Java中的类将具有三种变量,即静态(类),实例和局部变量。
实例变量-这些变量属于类的实例(对象)。这些在类内但在方法外声明。这些在实例化类时初始化。可以从该特定类的任何方法,构造函数或块中访问它们。
类/静态变量-类/静态变量属于类,就像实例变量一样,它们在类内在任何方法之外声明,但使用static关键字声明。
它们可以在编译时访问,您可以在实例化之前/不实例化类时进行访问,整个类中只有一个静态字段的副本可用,即,静态字段的值在所有对象中都相同。您可以使用static关键字定义一个静态字段。
局部变量-这些变量属于方法/块/构造函数并在其中声明/定义。这些变量的范围位于方法(或块或构造函数)之内,执行后将被销毁。
尝试块中的变量
因此,如果在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