{
変数のスコープが start of blockと end of blockで囲まれていることは知っています}
。ブロック内で同じ変数を宣言すると、コンパイル エラーVariable already defined
が発生します。しかし、次の例を見てください。
public class Test{
int x=0;// Class scope variable
public void m(){
int x=9; //redeclaration of x is valid within the scope of same x.
if(true){
int x=7; // but this redeclaration generates a compile time error.
}
}
ここでx
は、クラスで既に宣言されていますが、メソッドで再宣言できます。ただし、if
ブロック内でx
は再宣言できません。
クラス スコープ変数の再宣言ではエラーが発生しないのに、メソッド スコープ変数の再宣言ではエラーが発生するのはなぜですか?