`

Java 静态语句块、语句块、构造函数执行顺序

 
阅读更多


  package test;  
      
    class Parent{  
        static String name = "hello";  
        {  
            System.out.println("3 parent  block");  
        }  
        static {  
            System.out.println("1 parent static block");  
        }  
        public Parent(){  
            System.out.println("4 parent constructor");  
        }  
    }  
      
    class Child extends Parent{  
        static String childName = "hello";  
        {  
            System.out.println("5 child  block");  
        }  
        static {  
            System.out.println("2 child static block");  
        }  
        public Child(){  
            System.out.println("6 child constructor");  
        }  
    }  
      
    public class StaticIniBlockOrderTest {  
      
        public static void main(String[] args) {  
            new Child();//语句(*)  
        }  
    }  


执行结果:
1 parent static block
2 child static block
3 parent  block
4 parent constructor
5 child  block
6 child constructor

分析:对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
而且子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
分享到:
评论

相关推荐

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

    * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * (如果是重写即子类将父类的实例方法重写类,则调用子类的,如果是隐藏即方法则父类中声明为静态方法,则调用父类本身的...

    c++模拟测试题

    11、A 为类,执行语句 A a1,a2(2),*a3[3];调用了 A 的构造函数 6 次。N 12、派生类后于基类构造,先于基类释放。Y 13、类是对象的抽象,对象是类的具体化。Y 14、二进制文件中数据的存放格式和计算机内存中存储的...

    在Java中自由块的执行顺序

    java中的自由块分为静态的自由块和非静态的自由块。非静态自由块的执行时间是:在执行构造函数之前。静态自由块的执行时间是:class文件加载时执行。

    Java中类的加载顺序

     具体的题目我肯定记不清,不过我们可以换个直接的问法,如果类A和类B中有静态变量,静态语句块,非静态变量,非静态语句块,构造函数,静态方法,非静态方法,同时类A继承类B,请问当实例化A时,类内部的加载顺序...

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

    signByIF.java 用if语句实现符号函数示例 triangleStar.java 输出一个由*组成的直角三角形 upperToLowCase.java 大写转换成小写 variableScopeExample.java 变量使用范围示例 第3章 示例描述:本章学习对象和类...

    Java中this与super的区别

    this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。 要记住的几个关键点是: 在构造方法中this与super不能共存;其次有this或super出现的地方必须是构造方法的第1句; 静态方法...

    javacore:java核心 运算符,控制语句,函数,异常,集合,线程,数组,IO流,网路编程,设计模式,java8,面试相关

    Java基础 java控制流程语句 数据交换 左(右)移 加密 java控制流程语句 switch语句 季节判断 while循环 1+...+100 do while循环 ...jvm类加载顺序决定代码执行顺序 super关键字 方法重写 instanceof关键字 fi

    Java语言程序设计实验指导书

    3 对象和类 编写程序实现类和对象的操作,掌握构造函数与静态成员的使用。 4 继承与多态 编写程序实现类的继承、多态的实现。 5 抽象类、接口与内部类 编写程序实现类的继承、与接口的编写。 6 异常 编程实现处理...

    java编程规范(第三版)

    8.8 构造函数声明 182 8.9 枚举 189 第9章 接口 197 9.1 接口声明 197 9.2 接口成员 200 9.3 字段(常量)声明 201 9.4 抽象方法声明 203 9.5 成员类型声明 205 9.6 注释类型 206 9.7 注释 213 第10章 ...

    JAVA资格认证:SCJP310-055中文

    第一部分:声明、初始化、和作用域。  定义类、内部类、静态类、接口、枚举。  正确使用包语句和导入语句,包括静态导入。... 为类及层次类编写构造函数,知道默认构造函数的行为,实例化类及内部类

    java面试800题

    类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值; (2)调用父类构造函数; (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式; (4)调用本身构造函数。" Q0053 "Public ...

    零起点学通C++多媒体范例教学代码

    11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator关键字进行转换 11.11什么可以重载,什么不可以重载 第12章 继承 12.1 什么是继承和派生 12.1.1 复杂的继承和派生 12.1.2 继承和派生如何...

    零起点学通C++学习_多媒体范例教学代码

    11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator关键字进行转换 11.11什么可以重载,什么不可以重载 第12章 继承 12.1 什么是继承和派生 12.1.1 复杂的继承和派生 12.1.2 继承和...

    java 程序设计 期中考试.doc

    4.构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void. ( × ) 5.在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将...

    C++ 类的静态成员深入解析

    在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象。希望阅读本文可以使读者对类的静态成员变量和成员函数有更为深刻...

    java8看不到源码-Java-Rule-Book:Java的基本概念来回答有关Java工作原理的任何问题

    java8 看不到源码Java 规则手册 Java 的基本概念,用于回答有关 Java 工作原理的任何问题,尤其是...所有类都有默认构造函数,内部没有语句,默认情况下,直到您手动创建任何构造函数。 它可以有嵌套的静态接口。 嵌套

    疯狂JAVA讲义

    学生提问:构造器是创建Java对象的途径,是不是说构造器完全负责创建Java对象? 141 5.5.2 构造器的重载 142 学生提问:为什么要用this来调用另一个重载的构造器?我把另一个构造器里的代码复制、粘贴到这个构造器...

    C#中几个需要注意的概念

    构造函数:  C#中为了能够规范安全地使用通过New运算符实例化出来的对象,提供了实现对象进行初始化的...  构造函数语句块  }  例如: Class A {  Int x,y;//声明int类型字段  Public A(int x) //带

    《Java和Android开发实战详解》第6到10章源代码-by 南邮-陈杨

    7.4.1 类的构造函数 132 7.4.2 使用this引用对象本身 134 7.5 对象成员 136 7.6 对象使用类变量与方法 137 习题 140 第8章 继承、抽象类与接口 142 8.1 类的继承 142 8.1.1 类层次结构 142 8.1.2 ...

Global site tag (gtag.js) - Google Analytics