java类初始化的过程
在复习Thinking in java的过程中看到了相关内容,顺便整理一下,像下面一样的代码具体的执行顺序(ABCD都是类)
public class A {
public A(String text){
System.out.println("A was built :"+text);
}
D b1=new D("d in A");
static{
System.out.println("A Static Code out of constructor");
}
static D b2=new D("static b in A");
{
System.out.println("A Code out of constructor");
}
}
之前自己已经知道了,今天复习《Thinking in Java》又看到了这一段,在这里用代码来看看结果。最后给大家一个结论 代码如下(虽然有点长,但是仔细看还是挺简单的)
public class A {
public A(String text){
System.out.println("A was built :"+text);
}
D b1=new D("d in A");
static{
System.out.println("A Static Code out of constructor");
}
static D b2=new D("static b in A");
{
System.out.println("A Code out of constructor");
}
}
class B extends A{
static{
System.out.println("B Static Code out of constructor");
}
{
System.out.println("B Code out of constructor");
}
public B(String text){
super(text);
System.out.println("B was built :"+text);
}
}
class D{
public D(String text){
System.out.println("D was built :"+text);
}
public static void fsdaf(){
}
}
class C{
static{
System.out.println("C static code out of constructor");
}
public C(String text){
System.out.println("C was built :"+text);
}
}
class TestABC{
public static void main(String[] args) {
// A testA=null;
A testA=new A("testA");
System.out.println("********************************");
A testAf=new A("testA");
System.out.println("--------------------------------");
B testB=new B("testB");
System.out.println("********************************");
C testC=new C("testC");
}
}
结果如下
A Static Code out of constructor
D was built :static b in A
D was built :d in A
A Code out of constructor
A was built :testA
********************************
D was built :d in A
A Code out of constructor
A was built :testA
--------------------------------
B Static Code out of constructor
D was built :d in A
A Code out of constructor
A was built :testB
B Code out of constructor
B was built :testB
********************************
C static code out of constructor
C was built :testC
从上面可以看出,如果没有继承父类 那么执行的顺序是
1.static类型的对象和代码段(那个在前面先执行哪个 且该类没有被实例化过)
2.类中非static的代码段
3.构造函数 如果该类已被实例化过,那么static的内容就不会再次被执行。
如果继承了父类 那么执行顺序是
1.父类中static类型的对象和代码段(哪个在前面先执行哪个 且该类没有被实例化过)
2.子类中的static类型的对象和代码段(哪个在前面先执行哪个 且该类没有被实例化过)
3.父类中的代码段
4.父类的构造函数
5.子类中的非静态代码段
6.子类构造函数
另外static的内容并不是代码写好就已经被执行,而是必须在使用到、类加载或者实例化的时候才会运行,这一点需要注意
java类初始化的过程的更多相关文章
- Java类初始化
Java类初始化 成员变量的初始化和构造器 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值 对于 char.short.byte.int.long.float. ...
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...
- 【知识总结】Java类初始化顺序说明
微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...
- Java类初始化和实例初始化过程
1.类初始化过程 一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 一个子类要初始化需要先初始化父类 一个类初始化就是执行<client>()方法(编译器生成 ...
- Java 类初始化和实例初始化过程
1.类初始化过程 2.实例初始化过程 3.方法的重写
- [读书笔记] java类初始化
以下内容来自周志明的<深入理解java虚拟机>: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导 ...
- 转!!关于java类初始化顺序
原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方 ...
- JAVA 对象初始化的过程
对象初始化的过程例:Student S = new Student();1.因为new Student()用到了Student类,所以会把它从硬盘上加载进入内存2.如果有static静态代 ...
- Android(java)学习笔记136:Java类初始化顺序
Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论: 1 .继承体系的所有静态成员初始化( ...
随机推荐
- 最小生成树的Kruskal算法实现
最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...
- Sublime Text3 安装markdown插件
1.打开Sublime Text,使用快捷键 ctrl+` (左上角Tab键上方,Esc键下方)或者使用菜单 View > Show Console menu,此时将出现Sublime Text ...
- 对LR关联的一些理解
从接触LR关联的迷茫,到现在略有感悟,小记期间的一些理解. 一开始认识关联是在LR自带学习例子,需要关联session,也知道了自动关联,手动关联以及边录制边关联. 在使用关联的过程中,也学习了web ...
- html(单纯html标签)
html是超文本标记语言, 不是编程语言. 单标签:<br/>.<img>.hr(水平线).input, 双标签:h1~h6,p,a,div,head,body,title,s ...
- python 线程之 threading(四)
python 线程之 threading(三) http://www.cnblogs.com/someoneHan/p/6213100.html中对Event做了简单的介绍. 但是如果线程打算一遍一遍 ...
- ACM: NBUT 1105 多连块拼图 - 水题 - 模拟
NBUT 1105 多连块拼图 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format: Practice Appoint ...
- jQuery学习笔记--JqGrid相关操作 方法列表(上)
1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridi ...
- IPV6入门篇
引言 由于互联网的快速发展与普及,原有的IPV4地址已不能满足网络用户的需求,虽然NAT可以缓解IPV4地址的耗尽,但NAT破坏了网络环境的开放.透明以及端到端的特性,因此IPV6地址协议应运而生.I ...
- 解决Windows Server2008R2中导入Excel不能使用Jet 4.0
操作系统使用了Windows Server2008R2(Windows Server2008R2是64位系统,同时配置IIS7.0 原读取Excel文件代码为: string strConn = st ...
- svn 修改文件的二进制或文本标记
在添加一个文件的时候,svn自动标记成了二进制文件.当时也没在意就提交了.结果修改了之后不能进行svn diff操作,说是二进制文件不能进行diff操作.在网上找了个方法,修改这个文件的标记属性,把这 ...