在下面的java程序中,即使成员" x"在try块之外定义,它可以在try块内访问。在" y"的情况下,它在try块内定义。但是在try块之外无法访问它。为什么会这样?
package com.shan.interfaceabstractdemo;
public class ExceptionDemo {
public static void main(String[] args) {
int x = 10;
try {
System.out.println("The value of x is:" + x);
int y = 20;
} catch (Exception e) {
System.out.println(e);
}
System.out.println("The value of y is:" + y);
}
}
输出是:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
y cannot be resolved to a variable
at com.felight.interfaceabstractdemo.ExceptionDemo.main(ExceptionDemo.java:12)
答案 0 :(得分:5)
任何{}
块都在Java中定义范围。因此,在try块内声明的任何变量(例如y
)只能在try块内访问。
x
在包含您的try块的外部块中声明(这是整个main
方法的块),因此可以在try块中访问它。
答案 1 :(得分:1)
Java中的每个局部变量(方法的变量)都有一个由{}
块分隔的范围,在该块中声明它:变量是可访问的,在变量不可访问的范围内。换句话说,您声明的变量仅存在于声明它的{}
中。
在您的示例中,变量x
的范围在方法本身内,而y
的范围在try
块内:
public static void main(String[] args) {
// here x scope begins
int x = 10;
try { // here y scope begins
System.out.println("The value of x is:" + x);
int y = 20;
} // here y scope ends
catch (Exception e) {
System.out.println(e);
}
System.out.println("The value of y is:" + y);
}
// here x scope ends
为了确保哪个是局部变量的范围,您必须在声明变量作为范围的开头之前立即考虑第一个{
,并将关闭左括号的}
视为结束 - 注意后者不一定是第一个右括号,因为在变量声明之后可能存在{}
块的其他嵌套级别(在您的示例x
中嵌套{}
由于右括号}
是关闭主方法的那个,因此仍然可以访问变量的块。