java初始化顺序

来源:互联网 发布:适用于mac的浏览器 编辑:程序博客网 时间:2024/06/05 14:30

1、在类的内部,变量定义的先后顺序决定了初始化的顺序,变量会在任何方法(包括构造器)被调用之前得到初始化,而对于静态变量,会首先初始化。

class Bowl {
  Bowl(int marker) {
    System.out.println("Bowl(" + marker + ")");
  }
  void f1(int marker) {
    System.out.println("f1(" + marker + ")");
  }
}

class Cupboard {
  Bowl bowl3 = new Bowl(3);
  static Bowl bowl4 = new Bowl(4);
  Cupboard() {
    System.out.println("Cupboard()");
    bowl4.f1(2);
  }
  void f3(int marker) {
    System.out.println("f3(" + marker + ")");
  }
  static Bowl bowl5 = new Bowl(5);
}

public class StaticInitialization {
  public static void main(String[] args) {
    System.out.println("Creating new Cupboard() in main");
  }
  static Cupboard cupboard = new Cupboard();
}

/*outout如下:

Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main

*/

//运行以上代码,要执行main方法,则必须先加载StaticInitialization.java类,
而在StaticInitialization.java类中定义了静态变量cupboard,则会先初始化Cupboard类,而Cupboard类中包含静态对象Bowl4、Bowl5,则会先加载Bowl类,输出Bowl(4)
Bowl(5) ,而Cupboard类中还定义了非静态变量bowl3,则输出Bowl(3),至此Cupboard中的变量初始化完毕,初始化其构造方法,输出Cupboard()
f1(2),至此StaticInitialization.java类中定义的静态变量cupboard所涉及到的内容初始化完毕,继续执行main方法中的内容,输出Creating new Cupboard() in main。

原创粉丝点击