`

java中子类与父类中的静态代码块、非静态代码块和构造函数的加载顺序

阅读更多
面试中的笔试可能会遇到以下问题:

写出下面代码的执行结果:

class A{
static{
System.out.println("父类静态代码块...1");
}
public A(){
System.out.println("父类构造函数...");
}
{
System.out.println("父类非静态代码块...1");
}
static{
System.out.println("父类静态代码块...2");
}
{
System.out.println("父类非静态代码块...2");
}
}
class B extends A{
static{
System.out.println("子类静态代码块...1");
}
public B(){
System.out.println("子类构造函数...");
}
{
System.out.println("子类非静态代码块...1");
}
static{
System.out.println("子类静态代码块...2");
}
{
System.out.println("子类非静态代码块...2");
}
}
public class LoginAction {
public static void main(String[] args) {
System.out.println("main方法...");
new B();
}
}

运行结果是:

main方法...
父类静态代码块...1
父类静态代码块...2
子类静态代码块...1
子类静态代码块...2
父类非静态代码块...1
父类非静态代码块...2
父类构造函数...
子类非静态代码块...1
子类非静态代码块...2
子类构造函数...

首先要弄清楚子类与父类中的静态代码块、非静态代码块和构造函数的加载顺序:
    加载父类中的静态代码块 ---> 加载子类中的静态代码块 ---> 加载父类中的非静态代码块和构造函数(先非静态后构造)---> 加载子类中的非静态代码块和构造函数(先非静态后构造)
    而对于多个静态代码块,按代码的顺序加载...
分享到:
评论

相关推荐

    构造函数与静态块的执行顺序

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    java 子类对象赋值给父类对象的使用

    通过以上讨论,我们可以看到,Java中子类对象赋值给父类对象是一种强大且灵活的设计模式,它允许我们在代码中使用抽象的父类引用,从而简化编程,增加代码的通用性和可维护性。在实际项目中,合理利用这一特性,能够...

    java中子类继承父类,程序运行顺序的深入分析

    在示例中,"========方法体======== "(父类的非静态代码块)和"========无名称方法体======== "(子类的非静态代码块)分别在它们对应的构造方法之前执行。 3. **构造方法**:之后,会调用构造方法来创建对象。...

    c++中子类对象不能调用父类中的虚函数

    在C++编程语言中,`指针`和`引用`是两种非常关键的特性,它们在内存管理和对象操作中起到核心作用。同时,`虚函数`是实现多态性的重要机制,这对于面向对象编程至关重要。然而,有一个重要的概念是:子类对象不能...

    Java序列化中子类、父类构造函数问题实例分析

    本文主要介绍了Java序列化中子类、父类构造函数问题,结合实例形式分析了java父类与子类构造函数中序列化接口调用相关操作技巧与使用注意事项。 一、序列化接口的实现 在Java中,如果父类实现了序列化接口,那么其...

    Java中子类调用父类构造方法的问题分析

    本篇文章介绍了,Java中子类调用父类构造方法的问题分析。需要的朋友参考下

    C#中子类重写父类的方法

    本文将深入探讨C#中子类如何重写父类的方法,以及这种方法在实际编程中的应用。 ### 1. 继承的概念 在C#中,继承是通过使用`:`运算符实现的。一个类(子类)可以通过继承另一个类(父类)来获得其所有非私有的成员...

    Python子类继承父类构造函数详解

    ### Python子类继承父类构造函数详解 ...总结起来,Python中子类可以通过多种方式处理父类的构造函数:不重写、重写以及调用父类的构造函数。正确地管理这些构造函数可以帮助开发人员更有效地组织和维护代码。

    C#中子类调用父类的实现方法

    总结,C#中子类调用父类的方法主要通过构造函数调用和直接访问公共属性实现。在子类构造函数中使用`base`关键字可以指定调用父类的特定构造函数,而父类的公共属性可以直接在子类中被读取和修改。这种机制对于代码...

    python中子类调用父类函数的方法示例

    总结来说,Python中子类调用父类函数主要有两种方式:直接通过父类名调用或使用`super()`函数。选择哪种方式取决于个人喜好和代码的可读性,但在Python 3中,通常推荐使用`super()`,因为它更具有灵活性,且能处理...

    Java中子类对象的特点测试代码清单.pdf

    以下是对标题“Java中子类对象的特点测试代码清单”和描述中的内容进行的详细解释。 首先,子类是父类的扩展,它能够继承父类的非私有属性和方法。在给出的代码示例中,`Chinese` 类是 `People` 类的子类,这表明 `...

    Java中子类和父类之间的调用关系

    在Java编程语言中,子类和父类之间的调用关系是面向对象编程中的核心概念。这一关系涉及到继承、构造器的使用以及`this`和`super`关键字的应用。以下是关于这些知识点的详细解释: 1. **构造器**: - 每个类可以有...

    在C++中子类继承和调用父类的构造函数方法

    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统...

    Java、C++中子类对父类函数覆盖的可访问性缩小的区别介绍

    在 Java 和 C++ 中,这个过程通常是通过定义与父类相同名称和参数列表的方法来完成的。 在 Java 中,当子类覆盖父类的函数时,如果试图降低函数的可访问性,如将 public 更改为 private 或 protected,编译器会报错...

    C++/JAVA/C#子类调用父类函数情况总结

    在Java中,子类调用父类的构造函数和函数如下: 1. **构造函数调用**: - **this(参数)**:在子类构造函数内部的第一行,通过`this(param)`调用本类的其他构造函数。 - **super(参数)**:同样在构造函数内部的第...

    Java中子类.pdf

    Java语言中的子类是指继承父类的类,子类继承父类的所有状态和行为,可以修改父类的状态或覆盖父类的行为,并添加新的状态和行为。子类的创建是通过使用extends关键词来指示所继承的父类。 子类的特点: 1. 继承...

    C++类继承之子类调用父类的构造函数的实例详解

    在C++类继承中,子类可以继承父类的成员变量和成员函数,但是在子类中调用父类的构造函数时需要特殊处理。 在本文中,我们将通过一个实例来详细介绍C++类继承之子类调用父类的构造函数的实现方法。 首先,我们定义...

    ChildClass.java

    java中子类强转父类,实际上依然是子类; 该引用只能调用父类中定义的方法和变量; 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法; ## Java 父类强转子类 ...

Global site tag (gtag.js) - Google Analytics