4
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

ただし、2番目の if ステートメントは正常に機能します。私はそれを自分で理解することはできません。単一のステートメントで変数を宣言しても意味がないことはわかっていますif。これらの2つのステートメントがどのように異なるか、誰かが私に説明してください。質問が本当に簡単なものでしたらすみません。

4

4 に答える 4

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

于 2013-01-07T10:25:21.043 に答える
8

これは、Java 言語仕様で指定されています。は次のIfThenStatementように指定されます。

if ( Expression ) Statement

int a = 0;はステートメントではなく、LocalVariableDeclarationStatement(のサブタイプではないStatement) です。しかし、aBlockは aStatementであり、aLocalVariableDeclarationStatementはブロックの正当な内容です。

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

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

参照

于 2013-01-07T10:36:58.927 に答える
5

Java 言語仕様 §14.2 から、LocalVariableDeclarationはStatementではないため、 BlockStatementでのみ発生することがわかります。

BlockStatement:
    LocalVariableDeclarationStatement
    ClassDeclaration
    Statement

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

于 2013-01-07T10:34:13.473 に答える
0

変数を個別に定義します。If 内に必要な値を割り当てます。このようにすると、if ブロック内の変数だけになります。しかし、if block は 1 行なので、実際には意味がありません。

于 2013-01-07T10:26:15.040 に答える