我无法确切地知道为什么这段代码会输出0?
public class Poly
{
public static void main(String[] args)
{
Square sq=new Square(10);
}
}
class Square
{
int side;
Square(int a)
{
side=a;
}
{
System.out.print("The side of square is : "+side);
System.out.println();
}
}
我想问的是什么 -
为什么显示输出0而不是10?
为什么实例初始化块首先进行初始化然后再进行初始化 构造
答案 0 :(得分:3)
完全初始化整个对象并不是实例初始化程序的工作,您可以拥有多个初始化程序,每个初始化程序都处理不同的事情。当您有多个初始化块时,它们按照它们在文件中出现的顺序运行,从上到下,并且它们不能包含前向引用。 This article by Bill Venners有很多有用的细节。
另一方面,构造函数 负责初始化整个对象。构造函数运行后,初始化对象,它应该处于有效状态并准备好使用。
因此,如果实例初始化程序在构造函数之后运行,它将不会进行初始化,那么它将改变已经设置的内容。所以初始化器必须在构造函数之前运行。
答案 1 :(得分:0)
顺序是这样的,静态块先行,然后是非静态块。然后是构造函数。