条件java的错误

时间:2013-01-07 10:23:21

标签: java

public class SomeClass{

    public static void main (String[] args){
        if(true) int a = 0;// this is being considered as an error 
        if(true){
            int b =0;
        }//this works pretty fine
    }
}//end class

在上面的类中,第一个if语句显示编译错误

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Syntax error on token "int", delete this token
    a cannot be resolved to a variable

然而,第二个if语句工作正常。我自己也搞不清楚。我知道在单个语句if中声明变量是没有用的。这两个陈述如何不同可以请一些人解释一下。如果问题非常简单,请原谅。

4 个答案:

答案 0 :(得分:13)

要定义int a的范围,您需要花括号。这就是为什么你得到

的编译器错误
if(true) int a = 0;

虽然这有效:

if(true){
    int b =0;
}

有关if语句的信息,请参阅JLS §14.9

IfThenStatement:
    if ( Expression ) Statement

if(true) int a = 0;时,int a = 0LocalVariableDeclarationStatement

答案 1 :(得分:8)

它在java语言规范中指定。 IfThenStatement指定为

  

if ( Expression ) Statement

int a = 0;不是声明,而是LocalVariableDeclarationStatement不是 Statement的子类型)。但是BlockStatementLocalVariableDeclarationStatement是块的合法内容。

 if (true) int a = 0;
           ^--------^    LocalVariableDeclarationStatement, not allowed here!

 if (true) {int a = 0;}
           ^----------^  Statement (Block), allowed.

<强>参考

答案 2 :(得分:5)

从Java语言规范§14.2中,您可以看到 LocalVariableDeclaration 不是 Statement ,因此只能出现在 BlockStatement中

BlockStatement:
    LocalVariableDeclarationStatement
    ClassDeclaration
    Statement

参考:http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf

答案 3 :(得分:0)

单独定义变量。并在If中分配您想要的值。如果你这样做,它只会是if块内的一个变量。但是,如果你有一条线,如果阻止它真的没有意义。