2017-08-11 3 views
-4

「エラー:期待」:としてエラーを取得、コードの一部の下にコンパイル時に「」同じ文の中で(int型、A = 10;)Javaコンパイルエラー12:エラー:<identifier>が必要です:別のステートメントで変数の初期化と宣言。

class Test { 

    public static void main(String[] args) { 
     Hello h=new Hello(); 
     System.out.println(h.a); 

    } 
} 

class Hello { 

    int a; 
    a=10; 
    /*{ 
    a=10 
    } 

}*/ //Putting the reference variable inside the Instance block . 

しかし宣言する場合、変数を初期化しないで、その後のHelloクラスの内部エラーが発生します。

変数は単純に名前が付けられ
class Test { 

    public static void main(String[] args) { 
     Hello h=new Hello(); 
     System.out.println(h.a); 

    } 
} 

class Hello { 

    int a = 10; //changed this line 

} 

、例えば、以下のように、それが宣言されます。

+4

'a = 10'はその場所では有効ではありません。単純です。 – luk2302

+0

@liteite、 '{a = 10;} 'のようなブロック文に入れておく必要があります。 – AxelH

+2

@AxelH Bad adise。なぜイニシャライザブロックと彼を混同するのですか?平地 'int a = 10'は仕事を終わらせます。 – GhostCat

答えて

0

問題は、あなたが以下のようなものを持っている必要があり、浮動初期化子文を持っています。変数を宣言すると、メモリの割り当てが行われ、変数の型が定義され(たとえばint,charなど)、変数には名前が与えられます(a)。

変数を初期化するとき、上記の情報はすべて既知です。変数を既定値から新しい値に変更するだけです。

class Testから変数を初期化できないのは、Javaの作成者(および保守者)が設定したルールです。あなたがしようとすると、興味深いことに、以下のEclipseはコンパイルできないように:

public class Test { 
    int i; 
    i = 10; 
} 

だから私はそれがIDEの安全性の特徴であり得ると思ったので、私は、コマンドラインから実行しました:

example

、その識別子の予想エラーとしてフラグが立てられました。簡単に言えば、Javaは、クラスレベルの変数を作成するときには、同じ行に宣言したり、宣言したり、Javaコードから変換するソフトウェア→バイトコード→マシンコード(JVM、 Java Virtual Machine)は、そのスコープレベルでの複数行の初期化に対処することはできませんでした。

+1

浮動イニシャライザ文はどういう意味ですか?また、ブロック内にインスタンス変数 "a"を置くことも有効です。同じステートメントで変数を宣言して初期化する必要があるのはなぜですか? –

+0

私はより多くの情報を更新しました。私は良い答えを見つける前に自分自身を探検しなければならなかった! –

関連する問題