为什么大括号不是必需的(如下所示)?

qmb5sa22  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(335)

现在每个人都说,如果你想在一个控制语句中使用多个语句,必须将它们包含在大括号中。但是,如果您这样使用:

if(condition) //first if statement
if(condition) //if statement nested inside the first
System.out.println("test"); //statement inside the second if statement

由于第二个if语句(不带分号)在第一个if语句中(不带大括号),该代码将导致一个错误,从而完成第一个if语句的限制。因此println语句的范围应该在第一个if语句之外。因此,上述代码应等同于

if(condition) {
    if(condition) 
}
System.out.println("test");

但不是那样的。第一个代码运行成功。为什么?

zsbz8rwp

zsbz8rwp1#

你的问题是这样开始的:
现在每个人都说,如果你想在一个控制语句中使用多个语句,必须将它们包含在大括号中。
这是绝对正确的。你在这里遇到的细微差别是什么意思,什么东西是一个单一的声明,而不是多个声明。
正如@rici所指出的,在大多数编程语言中,if语句由某种条件表达式和一个在该条件为真时要执行的保护语句组成。从这个意义上说,if语句中必须有一些语句才能在语法上正确。
让我们看看你的陈述,但要自下而上。声明

System.out.println("Test");

被视为一个单独的语句。同样地,

if (condition)
System.out.println("Test");

也是单个条件语句。然而,

if (condition)

本身不是有效的条件语句;这将是一个语法错误。
这意味着

if (condition1)
if (condition2)
System.out.println("Test");

是单个条件。具体来说,它是一个条件,其条件是 condition1 . 声明也是有条件的。那个条件有条件 condition2 并保护打印声明。

rxztt3cl

rxztt3cl2#

因为条件语句包含它限定的语句。
大括号不是 if 声明。它的语法很简单:

"if" "(" <expression> ")" <statement>

"if" "(" <expression> ")" <statement> "else" <statement>

语句的一种类型是block语句,其语法为:

"{" <statement>... "}"

哪里 <statement>... 意思是“零或更多” <statement> “s”。
block语句可以包括if语句(或任何其他类型的语句)。但它不能把一句话一分为二。以及 if (condition) 只是陈述的一半。

相关问题