[转贴] Java程序初始化顺序
来源:互联网 发布:vb if语句的用法 编辑:程序博客网 时间:2024/05/21 21:36
import java.util.*;public class Demo { static { System.out.println("i am static demo."); } { System.out.println("i am demo."); } static void print(){ System.out.println("can omit instance initialization?"); } public static void main(String[] args) { new Sub("child"); Demo.print(); }}abstract class Base { public String name = " ";public String sex="base"; public Base(String name) { System.out.println("name:" + this.name); this.name = name; System.out.println("invoke base constructor"); System.out.println("name:" + name); this.setName("parent"); } { System.out.println("invoke base instance block"); System.out.println("this.sex:"+this.sex); printInfo(); } static { System.out.println("invoke base static block"); } // public abstract void setName(); public abstract void printInfo(); public void setName(String name) { this.name = name; System.out.println("invoke parent setName method"); System.out.println("name:" + name); }}class Sub extends Base { public static int age = 10;public String sex="sub"; public Sub(String name) { super(name); System.out.println("invoke sub constructor"); System.out.println("name:" + name); } { System.out.println("invoke sub instance block"); System.out.println("name:" + name); } static { System.out.println("invoke sub static block"); } public void printInfo() { System.out.println(" "); System.out.println("invoke sub printInfo"); System.out.println("age:" + age); System.out.println("name:" + name); System.out.println(" "); } public void setName(String name) { System.out.println("invoke sub setName method"); this.name = name; System.out.println("name:" + name); }}
输出结果;
i am static demo.invoke base static blockinvoke sub static blockinvoke base instance blockthis.sex:base
invoke sub printInfoage:10name:
name: invoke base constructorname:childinvoke sub setName methodname:parentinvoke sub instance blockname:parentinvoke sub constructorname:childcan omit instance initialization?初始化的实际过程为:
- 在其它任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。
- 父类static 块或变量
- 子类static块或变量
- 父类的显式初始化
- 父类构造函数
- 子类的显式初始化
- 子类的构造函数