在复习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类初始化的过程的更多相关文章

  1. Java类初始化

    Java类初始化 成员变量的初始化和构造器 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值 对于  char.short.byte.int.long.float. ...

  2. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

  3. 【知识总结】Java类初始化顺序说明

    微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...

  4. Java类初始化和实例初始化过程

    1.类初始化过程 一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 一个子类要初始化需要先初始化父类 一个类初始化就是执行<client>()方法(编译器生成 ...

  5. Java 类初始化和实例初始化过程

    1.类初始化过程 2.实例初始化过程 3.方法的重写

  6. [读书笔记] java类初始化

    以下内容来自周志明的<深入理解java虚拟机>: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导 ...

  7. 转!!关于java类初始化顺序

    原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方 ...

  8. JAVA 对象初始化的过程

    对象初始化的过程例:Student S    =    new Student();1.因为new Student()用到了Student类,所以会把它从硬盘上加载进入内存2.如果有static静态代 ...

  9. Android(java)学习笔记136:Java类初始化顺序

    Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化( ...

随机推荐

  1. 关于 iOS 加密的一些详谈

    iOS 加密算法有那么几种,如 md5,sha1,AES,base64 和 rsa 等. 1. md5: MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息 ...

  2. execl表格VLOOKUP函数的使用

    使用场景:最近在处理一个表格数据的时候出现了一点麻烦.想把另外表2里面对应的的数据放到表1里面,本来表2的ID是乱序的(这里为好看,就顺序排了.),一个个查找复制粘贴比较麻烦,后经大师指点VLOOKU ...

  3. nginx部分命令

    启动nginx start nginx 停止nginx nginx -s stop 重启nginx nginx -s reload 查看版本信息 nginx -v 大写V是查看配置信息 查看nginx ...

  4. 【Java EE 学习 22 上】【文件上传】【目录打散】【文件重命名】

    1.文件上传概述 (1)使用<input type="file">的方式来声明一个文件域. (2)表单提交方式一定要是post方式才行 (3)表单属性enctype 默 ...

  5. Structs框架

    一.准备工作及实例 1.解压struts-2.1.6-all.zip(structs网上下载) apps目录:struts2自带的例子程序 docs目录:官方文档. lib 目录:存放所有jar文件. ...

  6. 关于vector的内存释放问题

    以前一直想当然的以为vector 的clear()函数会保证释放vector的内存,今天网上一查资料发现完全不是我想象的那样子. 比如有如下代码: tempObject obj1; tempObjec ...

  7. Linux 任务控制

    Linux/Unix 提供了不同与 windows 的多任务处理,也提供一套用来切换前后台任务的命令 bg fg & Ctrl+z nohup sitsid Ctrl-Z 挂起程序 user@ ...

  8. web项目绝对路径与相对路径的问题

    1.绝对路径:就是一个文件url的全部或者磁盘完整的物理地址;例如 http://localhost:8080/navigation/a.jsp就是a.jsp的绝对路径,再例如 D:\TC\a.jsp ...

  9. 2016 ECJTU - STL

    1.ECJTU-STL重挂 STL 2.总结:学长出的题,本来还想ak的,结果又被虐了... 3.标程和数据:http://pan.baidu.com/s/1qYzXY2K 01    水 02  水 ...

  10. JS常用属性

    /*控制台输出*/ console.log("内容") /*控制台警告*/ console.warn("内容") /*错误提示*/ console.error( ...