[转贴] 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?初始化的实际过程为:

  1. 在其它任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。
  2. 父类static 块或变量
  3. 子类static块或变量
  4. 父类的显式初始化
  5. 父类构造函数
  6. 子类的显式初始化
  7. 子类的构造函数
此过程中若有父类构造体中调用方法可被子类重载,则JVM会从最低子类对象处寻找此方法,找到则执行,虽然此时对象还未完全生成(可能会造成潜在的错误)。转自 http://blog.csdn.net/JefferyLee/archive/2007/08/13/1741668.aspx
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 阳关曲中秋月 家好月圆庆中秋 中秋几月几日 中秋是几月几日 中秋月圆图片 中秋月 苏轼 古诗中秋月李峤注音版 梦想为王 中秋月明 八月中秋山林 中秋之月诗歌 月圆中秋作文 八月中秋图片 中秋月图片 中秋忆月 中秋月宋苏轼 2017中秋节 中秋节的来源 中秋古诗大全 中秋节来历 关于中秋节手抄报 中秋节手抄报大全 关于中秋节的诗句 中秋节英语作文 关于中秋节诗句 中秋节故事 中秋节英语 中秋节动态表情 关于中秋节的作文 中秋节手抄报图片 关于中秋节作文 中秋节简笔画 中秋节日记 2019中秋节 关于中秋节的故事 中秋节英文 中秋节的古诗 中秋节传说 中秋节快乐 中秋节手抄报内容 中秋节画 中秋节图片闪动图