`
wanjianfei
  • 浏览: 307408 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java类完整的构造执行顺序

    博客分类:
  • J2SE
阅读更多

Java类完整的构造执行顺序

  如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块

  如果类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块

  将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false;对象类型的初始值为null)

  如果构造方法中存在this()调用(可以是其它带参数的this()调用)则执行之,执行完毕后进入第7步继续执行,如果没有this调用则进行下一步。(这个有可能存在递归调用其它的构造方法)

  执行显式的super()调用(可以是其它带参数的super()调用)或者隐式的super()调用(缺省构造方法),此步骤又进入一个父类的构造过程并一直上推至Object对象的构造。

  执行类申明中的成员赋值和初始化块。

  执行构造方法中的其它语句。

  其中第4步是比较麻烦的,因为this调用实际上会调用类的另外一个构造方法,最终应该是执行类的某个构造方法,它可能会显示的调用super,但是无论是否调用super,最终都是执行super的,也就是父类的构造方法并一直这样递归到Object,所以在子类和父类的构造中,首先构造或者说执行的是父类的构造,但是它是由子类的构造方法调用的,先于构造方法的方法体里面的内容,这个是由编译器决定的。所以我感觉简单直观一些的顺序表述应该是:

  如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块

  如果类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块

  将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false;对象类型的初始值为null)

  执行构造方法,并可能递归调用this(),最终先执行父类的构造方法并一直递归到Object的构造方法的执行

  父类的构造方法执行完成后,执行类申明中的成员赋值和初始化块。

  执行构造方法中的其它语句。

  最终的简化顺序版本是:

  父类的静态成员赋值和静态块

  子类的静态成员和静态块

  父类的构造方法

  父类的成员赋值和初始化块

  父类的构造方法中的其它语句

  子类的成员赋值和初始化块

  子类的构造方法中的其它语句

分享到:
评论

相关推荐

    Java类的完整构造执行顺序

    Java类的完整构造执行顺序

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

    记住,面试有可能会标出一些语句的,让你选择这些语句的执行顺序。不过只要知道原理,就没什么难的了。 执行先后顺序: 1、类加载到内存时static 加载进内润 2、调用类的构造方法时先调用父类的构造方法,在调用...

    Java:静态代码块和构造函数执行顺序

    /*大体上顺序是这样的:(也可以说是优先级,同一级的按顺序执行)  1 静态变量,静态代码块(类加载时执行,类不加载不执行)  2 实例变量,实例代码块(创建对象时才执行,不创建对象不执行)  3 构造函数,...

    深入理解java构造器机理

    java构造方法是java类中最重要的一个概念,这篇文档涵盖了,java对象初始化过程中构造器调用的顺序,及作用。

    由浅入深详解Java 类的实例化顺序

    java教程 由浅入深详解Java 类的实例化顺序 在子类对象被实例化的过程中,变量、构造方法以及代码块三者的先后顺序为: 1. 父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按...

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    java中静态代码块与构造方法的执行顺序判断

    对静态代码块以及构造函数的执行先后顺序,一直很迷惑,直到最近看到一段代码,发现终于弄懂了,所以这篇文章主要给大家介绍了关于如何判断java中静态代码块与构造方法的执行顺序的相关资料,需要的朋友可以参考下。

    Java中类的加载顺序

    当然题意没有这么直白,题目只要求你写出程序运行后所有System.out.println的输出结果,其中程序是题目给的,而各个System.out.println的执行顺序不同会导致后程序输出的结果也不同。  具体的题目我肯定记不清,...

    Java类初始化顺序

    所有构造方法执行顺序如下: 执行父类的构造方法。没有继承默认继承的Object。Object会开辟一块内存,初始化所有数据为0、null、false等默认值 执行本类中的成员代码块。所有代码块是从上往下顺序执行的,所以代码...

    java 基础 类对象创建实例化过程 实例解析

    继承关系:类的实例化顺序 * 执行过程为:启动类是否为继承关系树中的一个,如果是则先执行启动类的所有父类的静态语句块;然后执行启动类的静态语句块static{} -> * 执行启动类的main函数 -> 创建对象的继承树从...

    Java 普通代码块静态代码块执行顺序(实例讲解)

    下面小编就为大家带来一篇Java 普通代码块静态代码块执行顺序(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    举例说明Java中代码块的执行顺序

    主要介绍了举例说明Java中代码块的执行顺序,包括静态属性和非静态属性以及构造函数等相关的执行先后,需要的朋友可以参考下

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

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

    JAVA复习资料

    12、在Java中有一种叫作__构造方法__的特殊方法,我们在程序中用它来对类的对象成员进行初始化。 13、面向对象技术具有_封装性___、_继承性___、_抽象性___、多态性等特性。 14、Java中所有类都是类 _Object___...

    字节跳动、腾讯java面试.zip

    讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候,他们的执行顺序。 是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。 JAVA8 的 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 if语句的嵌套 71 4.2.3 if-else语句 73 4.2.4 if-else语句嵌套 75 4.3 使用while进行循环 76 4.3.1 使用while语句 76 4.3.2 使用...

    java常用工具类的使用

    该类的大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类的另一个主要功能是,在数据库操作中,它允许将毫秒值表示为SQL DATE值,是数据库操作中java.sql.Date的父类。关于数据库...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 if语句的嵌套 71 4.2.3 if-else语句 73 4.2.4 if-else语句嵌套 75 4.3 使用while进行循环 76 4.3.1 使用while语句 76 4.3.2 使用...

    JAVA基础知识精华总结 收藏

    (3) 一个类继承了另一个类的内部类,因为超类是内部类,而内部类的构造方法不能自动 被调用,这样就需要在子类的构造方法中明确的调用超类的构造方法。 接上例: class C extends A.B { C() { new A().super()...

    杰普学习corejava总结笔记

    2.构造器执行顺序 1.类加载,同时初始化类中静态的属性(赋默认值) 2.执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示...

Global site tag (gtag.js) - Google Analytics