public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println(“构造块”);
}
static
{
System.out.println(“静态块”);
}
public static void main(String[] args)
{
B t = new B();
}
}
输出为
构造块 构造块 静态块 构造块当初这道题做错了 ,到后来又做了一遍又错了,啪啪啪大脸,这回好好整理下,不能再错了。
总结一下:
静态方法只会初始化一次。程序中最先初始化的是静态域包括(静态方法、静态变量、静态块),他们三个的初始化顺序是看先后顺序。所以需要先初始t1 = new B()和 t2 = new B();他们为静态变量,输出二个构造块,然后调用静态块,最后初始化main中的new B();输出构造块
public class HelloB extends HelloA {
public HelloB(){
System.out.println("B的构造方法");
}
{
System.out.println("B的构造代码块");
}
static{
System.out.println("B的静态代码块");
}
//public static HelloB hB = new HelloB();
public static void main(String[] args){
new HelloB();//调用B的构造方法
}
}
输出结果为:
A的静态代码块
B的静态代码块
A的构造代码块
A的构造方法
B的构造代码块
B的构造方法
继承的话需要先初始化顺序为
1.父类静态块
2.子类静态块
3.父类构造块
4.子类构造块
反正记住 构造方法是最后初始化的 优先级很低。