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

Java 静态语句块、语句块、构造函数

阅读更多
以下是一道笔试题:
package com.example;

public class Parent
{
    public Parent()
    {
        System.out.println("Parent>>>>>>>>>>>1");
    }

    {
        System.out.println("Parent>>>>>>>>>>>2");
    }
    static
    {
        System.out.println("Parent>>>>>>>>>>>3");
    }
}

package com.example;

public class Child extends Parent
{
    public Child()
    {
        System.out.println("Child>>>>>>>>>>>1");
    }

    {
        System.out.println("Child>>>>>>>>>>>2");
    }
    static
    {
        System.out.println("Child>>>>>>>>>>>3");
    }

    public static void main(String[] args)
    {
        new Child();
    }
}

请写出上面程序的执行结果。


此题是考查静态语句块、语句块以及构造函数的执行顺序。

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



因此执行结果是:
Parent>>>>>>>>>>>3
Child>>>>>>>>>>>3
Parent>>>>>>>>>>>2
Parent>>>>>>>>>>>1
Child>>>>>>>>>>>2
Child>>>>>>>>>>>1
  • jxl.jar (708.7 KB)
  • 下载次数: 7
分享到:
评论

相关推荐

    重写重载构造函数

    如果类不是静态的,C#编译器将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化。 私有构造函数可以阻止类被实例化。例如: C#复制代码 class NLog { // Private Constructor: private NLog() {...

    java函数速查手册常用函数

    在Java中,函数(或称为方法)是实现特定功能的代码块,可以被多次调用。以下是一些Java函数的重要知识点: 1. **方法定义**:一个Java方法通常包含返回类型、方法名、参数列表和方法体。例如: ```java public ...

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

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

    深入浅析Java中普通代码块、构造代码块与静态代码块

    例如,在给定的示例中,静态代码块在程序启动时首先执行,然后是`main`方法,接着是构造代码块(每次创建对象时),最后是构造函数。如果类中还有其他类,如类`A`,那么`A`的静态代码块会在`structure`类的`main`...

    C++Hook(钩子)编程,通过内联汇编,使类成员函数代替全局函数(静态函数)[收集].pdf

    通过内联汇编,构造类对象独享的函数(委托),完成了类成员函数到普通全局函数的转化,并在Windows Hook(钩子)编程中得到成功的实践。 首先,我们需要了解Hook(钩子)编程的基本概念。在Windows系统中,Hook(钩子)...

    java经典小程序-函数小程序

    类可以有多个构造函数,以便在创建对象时有不同的初始化方式。 12. **主函数(main())**: `public static void main(String[] args)`是Java程序的入口点,Java虚拟机(JVM)从这里开始执行程序。 综上所述,...

    Java静态和非静态成员变量初始化过程解析

    通过这两个示例,我们可以看到,非静态成员变量的初始化顺序是:成员变量初始化语句>成员变量初始化块>构造函数。 而对于静态成员变量,它们是在类加载时初始化的。例如,我们可以定义一个静态成员变量static ...

    JAVA基础总结,个人的心血哦

    构造执行顺序遵循:先执行静态语句块,再执行非静态语句块,最后是构造函数。 2. **单例模式** 单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。Java中常见的实现方式有饿汉式(静态常量)和...

    Java计算机语言函数应用

    - Java会为每个类提供一个默认构造函数,如果没有显式定义。 - 自定义构造函数允许我们在创建对象时初始化成员变量,或者执行特定的初始化操作。 7. **递归函数** - 递归函数是调用自身的函数,常用于解决分治...

    java代码-日常练习33,代码块### 静态代码块 static{代码内容;} 随着类的加载就执行一次 构造器代码块 {代码内容;} 每创建对象就执行一次 局部代码块 {代码内容;} 方法执行一次执行一次

    在Java编程语言中,代码块是程序中一组按顺序执行的语句,它们可以有特定的作用域和执行时机。在日常练习33中,我们关注的是三种不同类型的代码块:静态代码块、构造器代码块和局部代码块。下面将详细讲解这三种代码...

    2022年东北大学考试语言程序设计考核作业.doc

    5. 异常处理机制:Java 语言提供了try-catch语句来处理异常,catch语句块应当与try语句块对应,使得用该语句块来启动Java异常处理机制。 6. 字符串常量的概念:在Java语言中,字符串常量属于String类对象。 7. ...

    Java 实例 - Enum(枚举)构造函数及方法的使用源代码-详细教程.zip

    尽管枚举默认是final和静态的,但我们仍然可以为枚举类型定义构造函数。枚举构造函数主要用于初始化枚举实例的内部状态,但需要注意,构造函数不能被外部直接调用,只能在枚举实例的定义中使用。例如: ```java ...

    java函数

    Java函数是Java编程语言中的核心概念,它是代码的可重用单元,允许程序员定义执行特定任务的代码块。在Java中,函数也被称为方法(Method)。理解并熟练使用Java函数对于编写高效、可维护的代码至关重要。下面我们将...

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

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

    java代码块测试

    在Java编程语言中,代码块是执行特定任务的语句集合,它们可以是局部的、实例的、静态的,或者用于异常处理。本主题将深入探讨Java中的代码块及其在Struts2框架中的应用。 首先,让我们理解Java的四种主要代码块: ...

    编程思想14章构造函数的初始化表达式

    这是构造函数体之外的一组初始化语句,它以冒号(:)开始,然后列出要初始化的成员及其对应的值。例如: ```cpp MyClass::MyClass(int val) : member1(val), member2(val * 2) {} ``` 这里,`member1`和`member2`在...

    在Java中自由块的执行顺序

    4. 如果`Son`继承自`Father`,在创建`Son`的实例时,会先执行`Father`的非静态自由块和构造函数,然后执行`Son`的非静态自由块和构造函数。 需要注意的是,静态自由块仅在类加载时执行一次,即使类的实例被创建多次...

    c++模拟测试题

    类有两个特殊的成员函数,构造函数和虚函数。N 8、类中提供了三种访问控制权:公有、私有、保护三种类型。Y 9、所谓继承就是利用已有的数据类型定义出新的数据类型。Y 10、静态成员函数没有 this 指针。Y 11、A 为类...

    2020阶段测试2复习题STU答案.docx

    在C++编程语言中,构造函数是用来初始化对象的特殊函数,而无参构造函数是没有参数的构造函数。在题目中提到的"Stu array[2];"语句中,这行代码是在创建一个名为`array`的Stu类对象数组,数组包含两个元素。根据C++...

Global site tag (gtag.js) - Google Analytics