public class Test {
{
System.out.println(age);
age=6;
System.out.println(age);
}
int age=8;
public static void main(String[] args) {
System.out.println(new Test().age);
}
}
为什么int age=8;在初始化块的下面定义,会报错。上面在执行初始化块时系统不是已经为该实例属性赋了一个默认初值0吗?
{
System.out.println(age);
age=6;
System.out.println(age);
}
int age=8;
public static void main(String[] args) {
System.out.println(new Test().age);
}
}
为什么int age=8;在初始化块的下面定义,会报错。上面在执行初始化块时系统不是已经为该实例属性赋了一个默认初值0吗?
int age;
{
System.out.println(age);
age=6;
System.out.println(age);
}
//int age=8;
public static void main(String[] args) {
System.out.println(new Test().age); }
}
为什么int age=8;在初始化块的下面定义,会报错。上面在执行初始化块时系统不是已经为该实例属性赋了一个默认初值0吗?你把age=6;放上面,你认为对吗,你还没有定义即没有声明一个变量显然违反了变量的生成规则,编译器不报错才怪呢,把int age=8;放上面OK,然后要重新给变量age赋值,可以直接age=6;因为变量age已经声明过了,即定义过了,是int类型,无需也不能再重新定义,即int age=6;这样就等于定义了两个一样的变量,编译器同样会报错,不知道你明白了没
即System.out.println(this.age);
其实这点我也有点疑惑,在没有this关键字前缀的情况下编译器报出的错误为不能在其定义前引用,而加了this关键字它就可以通过编译了。
而且前输出为0,后输出为6。
我想跟编译器处理上有关,如果你不加this关键字,编译器无法识别在age定义之前到底为成员变量还是局部变量。