java 程序的初始化顺序是怎样的?

来源:互联网 发布:开发类似唯品会软件 编辑:程序博客网 时间:2024/09/21 06:33

【0】README

1)本文 转自“ java 程序员面试笔试宝典”, 这个书有点意思;


【1】java程序初始化遵循三个原则(rule)

r1)静态变量 优先于 非静态变量;

r2)父类优先于子类进行初始化;

r3)按照成员变量的定义顺序进行初始化;


【2】荔枝如下:

package com.mytest;public class MyTest1 {public static void main(String[] args) {new Child();}}class Father {private static String staticV = "父类静态变量"; // 1 private String nonStaticV = "父类非静态变量"; // 5static{ // 2System.out.println(staticV);System.out.println("父类静态代码块");}{ // 6System.out.println(nonStaticV);System.out.println("父类非静态代码块");}public Father() { // 7System.out.println("父类构造函数");}}class Child extends Father{private static String staticV = "子类静态变量"; // 3private String nonStaticV = "子类非静态变量"; // 8static{ // 4System.out.println(staticV);System.out.println("子类静态代码块");}{ // 9System.out.println(nonStaticV);System.out.println("子类非静态代码块");}public Child() { // 10System.out.println("子类构造函数");}}
父类静态变量父类静态代码块子类静态变量子类静态代码块父类非静态变量父类非静态代码块父类构造函数子类非静态变量子类非静态代码块子类构造函数

所以,初始化的顺序为:

  1. 父类静态变量
  2. 父类静态代码块
  3. 子类静态变量
  4. 子类静态代码块
  5. 父类非静态变量
  6. 父类非静态代码块
  7. 父类构造函数
  8. 子类非静态变量
  9. 子类非静态代码块
  10. 子类构造函数

0 0