java中静态代码执行顺序

1.Java中静态变量只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法。

2.  静态块:用static申明,JVM加载类时执行,仅执行一次
  构造块:类中直接用{}定义,每一次创建对象时执行
执行顺序优先级:静态块>main()>构造块>构造方法
3. 类的加载顺序
  (1) 父类静态对象和静态代码块
  (2) 子类静态对象和静态代码块
  (3) 父类非静态对象和非静态代码块
  (4) 父类构造函数
  (5) 子类
非静态对象和非静态代码块
  (6) 子类构造函数

4.例子(看了一目了然)

 class Root{
static {
System.out.println("Root的静态初始化块。");
}
{
System.out.println("Root的普通初始化块。");
}
public Root(){
System.out.println("Root的无参构造函数。");
}
} class Mid extends Root{
static {
System.out.println("Mid的静态初始化块。");
}
{
System.out.println("Mid的普通初始化块。");
}
public Mid() {
System.out.println("Mid的无参构造函数。");
}
public Mid(String msg) {
System.out.println("Mid的带参数构造函数,参数值为:" + msg);
}
} class Leaf extends Mid{
static {
System.out.println("Leaf的静态初始化块。");
}
{
System.out.println("Leaf的普通初始化块。");
}
public Leaf() {
super("Leaf传给Mid");
System.out.println("执行Leaf的构造函数。");
}
} public class staticTest {
public static void main(String[] args) {
new Leaf();
new Leaf();
}
}

执行结果

java中静态代码执行顺序

 注意:

静态初始化块仅在第一次使用类时执行初始化操作。上面例子中,第二次创建Leaf对象是,静态初始化块并没有执行。

上一篇:JAVA 父类与子类初始化顺序问题


下一篇:HTML标签