请教一道初始化顺序的问题:{a=6;}int a;是正确的,但。。

请教一道初始化顺序的问题:
[code="java"]
{
a =6;
}
int a;

[/code]

这样是正确的;但是
[code="java"]

a=6;

int  a;

[/code]

这时是错误的,是什么原因呢?求解,谢谢!

如果不加 {} 那肯定不对啊,没有声明怎么赋值呢
但是 如果 使用了 {} 那就是 非静态块了
还有一种是 static{} 静态块
非静态块在创建对象时,构造之前被调用,所以就是构造了对象,有了a以后
你对其赋值 这样是没错的。

使用了{},你可以把它理解成构造方法,每次new一个对象的时候,都会执行这段代码(如果{}是在某个方法内部的,那第一种也是有问题的),因此在{}中的a其实就是那个int a;

但第二中方法明显就有问题了,肯定不能在申明某个变量之前就使用这个变量。

在类中使用了{}是说这是一个块,该块内的代码会在所有成员初始化完成后被调用。
在方法中使用{}也是说这是一个块,不过这个块会在方法执行到该块的位置时立即被调用。
在类中还有一种块static{}这是静态块,该块中说使用的变量需要声明为静态成员,该块中的代码会先于类成员以及构造器被执行。

java中类的初始化顺序,非static语句块在成员变量被声明之后执行