为什么我需要在这里括号? Java:“if(true)int i = 0; [英] Why do I need brackets here? Java: "if (true) int i=0;"

查看:438
本文介绍了为什么我需要在这里括号? Java:“if(true)int i = 0;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

public class Test{
   public void newMethod(){

      if(true)int i=0;

   }
}

上面的代码给了我如下错误

The above code gives me the following error

Test.java:4: error: '.class' expected
      if(true)int i=0;
                  ^

但如果我写这样

public class Test{
   public void newMethod(){

      if(true){
         int i=0;
      }

   }
}

是没有错误!

我知道这个问题对社区没有帮助,但我真的很好奇为什么我需要在这个语句中括号。我已经在java中编程了几年,我只遇到这个错误只是现在。

I know this question isn't helpful to the community, but I'm really curious why I need to have brackets in this statement. I've been programming in java for a few years and I've only encountered this error just now.

我使用JGrasp的方式。

I'm using JGrasp by the way.

推荐答案

这是我的理解。引用自 JAVA SE 7规范第14章

Here is my understanding. Quoting from Chapter 14 of JAVA SE 7 specification:


14.2。块

14.2. Blocks

块是一系列语句,本地类声明和
大括号中的局部变量声明语句。

A block is a sequence of statements, local class declarations, and local variable declaration statements within braces.

Block:
    { BlockStatementsopt }

........     

BlockStatement:
    LocalVariableDeclarationStatement
    ClassDeclaration
    Statement


所以一个块总是在大括号 {...}

So a block is always in braces { ... }.


。局部变量声明语句

14.4. Local Variable Declaration Statements

局部变量声明语句声明一个或多个局部
变量名。

A local variable declaration statement declares one or more local variable names.

LocalVariableDeclarationStatement:
    LocalVariableDeclaration ;

LocalVariableDeclaration:
    VariableModifiersopt Type VariableDeclarators

.......

VariableDeclarator:
    VariableDeclaratorId
    VariableDeclaratorId = VariableInitializer

.......

每个局部变量声明语句立即包含在一个块中。局部变量声明语句可以与块中的其他类型的语句自由地混合

Every local variable declaration statement is immediately contained by a block. Local variable declaration statements may be intermixed freely with other kinds of statements in the block.

现在,立即包含是什么意思?

一些语句包含其他语句作为其结构的一部分;
这样的其他语句是语句的子语句。我们说,
语句S立即包含语句U,如果没有语句
T不同于S和U,使得S包含T并且T包含U.在
中以相同的方式,一些语句包含

Some statements contain other statements as part of their structure; such other statements are substatements of the statement. We say that statement S immediately contains statement U if there is no statement T different from S and U such that S contains T and T contains U. In the same manner, some statements contain expressions (§15) as part of their structure.

让我们看看你的例子:

public class Test{
   public void newMethod(){

      if(true)int i=0;

   }
}

在这种情况下,块:

{

          if(true)int i=0;

}

If Statement :

Inside this block we have an If Statement:

if(true)int i=0;

这个语句又包含一个局部变量声明:

This statement, in turn, contains a local variable declaration:

int i=0;

因此,违反了条件。 但是,在这种情况下,局部变量声明包含在一个If语句中,它不是一个块本身,而是由另一个块包含的。

Therefore, the condition is violated. Recall: Every local variable declaration statement is immediately contained by a block. However, in this case the local variable declaration is contained by an If statement, which is not a block itself, but is contained by another block. Hence this code would not compile.

唯一的例外是 for 循环:

A local variable declaration can also appear in the header of a for statement (§14.14). In this case it is executed in the same manner as if it were part of a local variable declaration statement.

(您可能需要重读几遍才能理解。)

(You may need to reread it a few times to understand.)

这篇关于为什么我需要在这里括号? Java:“if(true)int i = 0;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆