在 Java 中,只要您有一对,就可以创建一个新作用域。{ }
请考虑以下事项
class ScopeTest {
public static void main(String[] args) {
int i = 0;
{ int j = 0; System.out.println(j); }
{ int j = 2; System.out.println(j); }
}
}
try/catch 只是遵循这个成语,并强制创建一对。{ }
要响应您对未括弧的 if 语句的后续操作,请考虑:
class MultiRTree {
public static void main(String...args) {
boolean b = args.length == 0;
if(b) String s = new String("hello");
}
}
结果
c:\files\j>javac ScopeTest.java
ScopeTest.java:4: not a statement
if(b) String s = new String("hello");
^
ScopeTest.java:4: ';' expected
if(b) String s = new String("hello");
^
2 errors
但是,这将编译得很好。
class ScopeTest {
public static void main(String...args) {
boolean b = args.length == 0;
if(b) new String("hello");
}
}
为什么会这样,根据JLS第14章第9节,如果被定义为:
IfThenStatement:
if ( Expression ) Statement
语句定义为 (14.5)
Statement:
StatementWithoutTrailingSubstatement
LabeledStatement
IfThenStatement
IfThenElseStatement
WhileStatement
ForStatement
StatementWithoutTrailingSubstatement:
Block
EmptyStatement
ExpressionStatement
AssertStatement
SwitchStatement
DoStatement
BreakStatement
ContinueStatement
ReturnStatement
SynchronizedStatement
ThrowStatement
TryStatement
所以块,表达式语句或空语句这些都很好。但是声明(在第6章中定义)不在声明的语法中。