【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("子类构造函数");}
}
父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
父类非静态变量
父类非静态代码块
父类构造函数
子类非静态变量
子类非静态代码块
子类构造函数
所以,初始化的顺序为:
- 父类静态变量
- 父类静态代码块
- 子类静态变量
- 子类静态代码块
- 父类非静态变量
- 父类非静态代码块
- 父类构造函数
- 子类非静态变量
- 子类非静态代码块
- 子类构造函数