测试代码:
class HelloA{
public HelloA(){
System.out.println("HelloA 构造函数");
}
static { System.out.println("HelloA static语句块执行"); }
}
class HelloB extends HelloA{
public final static int Y=200;
public HelloB(){
System.out.println("HelloB 构造函数");
}
public static void display(){
System.out.println("HelloB 静态方法被执行");
}
static { System.out.println("HelloB static语句块执行"); }
}
public class Test {
public static void main(String[] args) {
int y=HelloB.Y;
new HelloB();
new HelloB();
}
运行结果:
HelloA static语句块执行
HelloB static语句块执行
HelloA 构造函数
HelloB 构造函数
HelloA 构造函数
HelloB 构造函数
总结:(静态变量、静态初始化块)–>(变量、初始化块)–> 构造器;如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法
1.static块 :每次类加载的时候,只执行一次
2. 堆内存用来存放由new创建的对象和数组,栈中主要存放一些基本类型的变量(int, short, long, byte, float, double, boolean, char)和对象句柄,函数