static修饰的变量和方法在类被加载的时候就即被初始化.
类中还存在两种特殊的代码块,即非静态代码块和静态代码块,前者是指直接由{ }括起来的代码,后者是指由static{ }括起来的代码。
package com.Block;
class Parent
{
static String name="hello";
{
System.out.println("parent Bolock 3");
}
static
{
System.out.println("parent static block 1");
}
public Parent()
{
System.out.println("parent constructor 4");
}
}
class Child extends Parent
{
static String childname="hello";
{
System.out.println("Child bolock 5");
}
static
{
System.out.println("Child static block 2");
}
public Child()
{
System.out.println("Child constructor 6");
}
}
public class Block {
public static void main(String[] args)
{
Child c=new Child();
}
}
运行结果为:
parent static block1
Child static block 2
parent Bolock 3
parent constructor 4
Child bolock 5
Child constructor 6
结论: 静态代码块最早被顺序执行,且只会被执行一次。
重点: 静态代码块,非静态代码块,构造函数调用顺序:
1.执行父类静态内容
2.子类静态内容
3.父类的非静态代码块
4.父类的构造方法
5.子类的非静态代码块
6.子类的构造方法