以下是一道笔试题:
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
分享到:
相关推荐
在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...
在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...
如果类不是静态的,C#编译器将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化。 私有构造函数可以阻止类被实例化。例如: C#复制代码 class NLog { // Private Constructor: private NLog() {...
- **静态构造函数**:主要用于初始化类的静态成员。它没有参数,不能被显式调用,当首次引用该类或首次加载类时,系统会自动调用静态构造函数。 **3. 继承与构造函数** 在继承结构中,派生类的构造函数必须显式...
在Java中,函数(或称为方法)是实现特定功能的代码块,可以被多次调用。以下是一些Java函数的重要知识点: 1. **方法定义**:一个Java方法通常包含返回类型、方法名、参数列表和方法体。例如: ```java public ...
* 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * (如果是重写即子类将父类的实例方法重写类,则调用子类的,如果是隐藏即方法则父类中声明为静态方法,则调用父类本身的...
在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...
#### 四、静态语句块与构造函数 除了静态成员变量和静态方法之外,Java还支持静态语句块。静态语句块通常用于执行一些只需要运行一次的初始化操作,在类加载时被执行。 ##### 示例代码分析: ```java class ...
例如,在给定的示例中,静态代码块在程序启动时首先执行,然后是`main`方法,接着是构造代码块(每次创建对象时),最后是构造函数。如果类中还有其他类,如类`A`,那么`A`的静态代码块会在`structure`类的`main`...
4. **静态字段初始化**:静态字段的初始化直接写在字段声明后的赋值语句会在静态构造函数之前执行。这是静态字段的预初始化,然后由静态构造函数进行进一步的初始化工作。 5. **唯一性**:每个类只能有一个静态构造...
通过内联汇编,构造类对象独享的函数(委托),完成了类成员函数到普通全局函数的转化,并在Windows Hook(钩子)编程中得到成功的实践。 首先,我们需要了解Hook(钩子)编程的基本概念。在Windows系统中,Hook(钩子)...
在C#编程语言中,函数方法、构造函数与析构函数是对象导向编程的重要组成部分,它们各自承担着不同的角色,并且对于程序的正确运行和优化性能具有重要作用。下面将详细介绍这三个概念及其用法。 ### 函数方法 在C#...
这里使用了`File`类的构造函数,传入两个参数:路径(`path`)和文件名(`name`)。这一步创建了一个`File`对象,但此时文件并未实际存在于文件系统中。 接下来调用`createNewFile()`方法来真正地在指定位置创建...
类可以有多个构造函数,以便在创建对象时有不同的初始化方式。 12. **主函数(main())**: `public static void main(String[] args)`是Java程序的入口点,Java虚拟机(JVM)从这里开始执行程序。 综上所述,...
通过这两个示例,我们可以看到,非静态成员变量的初始化顺序是:成员变量初始化语句>成员变量初始化块>构造函数。 而对于静态成员变量,它们是在类加载时初始化的。例如,我们可以定义一个静态成员变量static ...
- Java会为每个类提供一个默认构造函数,如果没有显式定义。 - 自定义构造函数允许我们在创建对象时初始化成员变量,或者执行特定的初始化操作。 7. **递归函数** - 递归函数是调用自身的函数,常用于解决分治...
在Java编程语言中,代码块是程序中一组按顺序执行的语句,它们可以有特定的作用域和执行时机。在日常练习33中,我们关注的是三种不同类型的代码块:静态代码块、构造器代码块和局部代码块。下面将详细讲解这三种代码...
另外,`this` 还可以用来在一个构造函数中调用另一个构造函数,但必须是构造函数的第一条语句。 ### static 的用法 `static` 是 Java 中的一个关键字,它用于定义静态变量、静态方法以及静态代码块。 #### 静态...
这意味着它们的初始化顺序早于 `main` 函数中的其他语句。这种特性使得静态变量可以在类的生命周期早期就被使用,即使没有创建任何实例。 在 `Table` 类和 `Cupboard` 类的构造器中,可以看到静态变量的初始化会...