`
izuoyan
  • 浏览: 8937722 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java程序初始化顺序

阅读更多

importjava.util.*;

publicclassDemo...{
static...{

System.out.println(
"iamstaticdemo.");
}

...{

System.out.println(
"iamdemo.");
}

staticvoidprint()...{
System.out.println(
"canomitinstanceinitialization?");
}

publicstaticvoidmain(String[]args)...{
newSub("child");
Demo.print();
}

}


abstractclassBase...{
publicStringname="";
publicStringsex="base";
publicBase(Stringname)...{
System.out.println(
"name:"+this.name);
this.name=name;
System.out.println(
"invokebaseconstructor");
System.out.println(
"name:"+name);
this.setName("parent");
}


...{
System.out.println(
"invokebaseinstanceblock");
System.out.println(
"this.sex:"+this.sex);
printInfo();
}


static...{
System.out.println(
"invokebasestaticblock");
}


//publicabstractvoidsetName();

publicabstractvoidprintInfo();

publicvoidsetName(Stringname)...{
this.name=name;
System.out.println(
"invokeparentsetNamemethod");
System.out.println(
"name:"+name);
}


}


classSubextendsBase...{
publicstaticintage=10;
publicStringsex="sub";
publicSub(Stringname)...{
super(name);
System.out.println(
"invokesubconstructor");
System.out.println(
"name:"+name);
}


...{
System.out.println(
"invokesubinstanceblock");
System.out.println(
"name:"+name);
}


static...{
System.out.println(
"invokesubstaticblock");
}


publicvoidprintInfo()...{
System.out.println(
" ");
System.out.println(
"invokesubprintInfo");
System.out.println(
"age:"+age);
System.out.println(
"name:"+name);
System.out.println(
" ");
}


publicvoidsetName(Stringname)...{
System.out.println(
"invokesubsetNamemethod");
this.name=name;
System.out.println(
"name:"+name);
}

}

输出结果;

i am static demo.
invoke base static block
invoke sub static block
invoke base instance block
this.sex:base


invoke sub printInfo
age:10
name:


name:
invoke base constructor
name:child
invoke sub setName method
name:parent
invoke sub instance block
name:parent
invoke sub constructor
name:child
can omit instance initialization?
初始化的实际过程为:

  1. 在其它任何事物发生之前,将分配给对象的存储空间初始化成二进制的零。
  2. 父类static 块或变量
  3. 子类static块或变量
  4. 父类的显式初始化
  5. 父类构造函数
  6. 子类的显式初始化
  7. 子类的构造函数
此过程中若有父类构造体中调用方法可被子类重载,则JVM会从最低子类对象处寻找此方法,找到则执行,虽然此时对象还未完全生成(可能会造成潜在的错误)。
分享到:
评论

相关推荐

    java程序初始化顺序

    介绍一下java程序初始化的顺序,这会对您以后的开发所有帮助

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    java类中元素初始化顺序详解

    对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器

    类初始化顺序示例讲解

    类的初始化顺序,适用于任何一种面向对象的语言。真正了解面向对象的程序的流程。配有实例

    java对象初始化顺序验证示例

    以下这段小程序对调用对象构造函数时,父类构造函数、成员变量初始化函数,以及非静态初始化块调用顺序进行验证,不考虑静态成员及静态初始化块

    顺序线性表的java实现代码

    顺序存储结构线性表的java实现代码,要在jdk1.6以上环境下运行

    Listener、Filter、Servlet与Java Web项目初始化项目例子 源代码

    通常JavaWeb项目启动时我们需要... 下面代码是模拟初始化的一个示例,可以在控制台看到程序的输出,和Listener、Filter、Servlet的启动先后顺序,强烈建议跟我一样喜欢动手的Coder操作一下,废话不多说,直接上代码了。

    java面试题静态加载顺序构造方法

    Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。...3、类初始化时,先初始化类的属性成员,在执行构造方法。

    Java开发者文档,分享日常学习的一些小知识点 .rar

     程序中主类的静态变量会在main方法执行前初始化。  不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时  未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序...

    Thinking in java4(中文高清版)-java的'圣经'

    5.6.1 指定初始化 5.7 构造器初始化 5.7.1 初始化顺序 5.7.2. 静态数据的初始化 5.7.3. 显式的静态初始化 5.7.4. 非静态实例初始化 5.8 数组初始化 5.8.1 可变参数列表 5.9 枚举类型 5.10 总结 第6章 访问权限控制 ...

    Java开发技术大全(500个源代码).

    errorInit.java 演示变量初始化错误的程序 integerExample.java 演示各种整型变量的使用 isPrime.java 判断素数 leapYearByIf.java 用if语句判断闰年 leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper...

    Java 基础核心总结 +经典算法大全.rar

    类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...

    JAVA程序设计教程

    Java程序.............................................................................................6 1.3.1 Java程序的结构 ...........................................................................

    类,对象,成员加载的顺序

    java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序

    java 编程入门思考

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    Java初学者入门教学

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    java联想(中文)

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    JAVA_Thinking in Java

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...

    Thinking in Java 中文第四版+习题答案

    2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结...

Global site tag (gtag.js) - Google Analytics