public class Demo {
{
a = 10;
}
int a=0;
public static void main(String[] args) {
System.out.println(new Demo().a);
}
}
//a没定义为什么没报错
你有点误解。a是声明了的。
成员变量按照其声明的顺序会被初始化,这个动作发生在所有事件之前,也就是编译器会在使用类的时候立刻将非静态成员变量初始化。
然后才是非静态初始化块。(非静态初始化块执行的时候其实是放在构造函数里最先执行的,然后才是构造函数里的赋值语句)
所以你的代码其实可以改成这样:
public
class
Demo
{
{
a =
10
;
}