首先看代码,猜猜结果
public class Base
{
private String baseName = "base";
public Base()
{
callName();
}
public void callName()
{
System. out. println(baseName);
}
static class Sub extends Base
{
private String baseName = "sub";
public void callName()
{
System. out. println (baseName) ;
}
}
public static void main(String[] args)
{
Base b = new Sub();
}
}
我一开始以为是"sub",运行之,得到的却是null
分析:
Base b=new Sub(); 声明为父类,实现为子类。
会先调用父类的构造方法。
父类构造方法中callName()方法子类中已重写,故执行子类callName()方法。
而子类中的变量baseName此时尚未初始化(因为父类构造函数尚未执行完毕),所以输出为null。
附:类加载顺序
(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )
(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )
(4) 父类构造函数
(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )
(6) 子类构造函数
参考:
https://www.nowcoder.com/questionTerminal/c2bfb1512dfa4a7eab773a5871a52402
分享到:
相关推荐
以下是Java中父类与子类加载顺序的详细解释: 1. **静态初始化**: - 首先,JVM会加载类的静态部分。这意味着先加载所有静态变量的初始化,并执行静态初始化块(如果有的话)。在给定的例子中,无论父类还是子类,...
本文将深入分析Java中子类继承父类时的程序运行顺序,这对于理解面向对象编程的执行机制至关重要。 首先,我们需要明确Java程序的执行流程。当一个类被加载时,会按照以下顺序执行: 1. **静态变量初始化**:首先...
总结,Java中继承关系的加载顺序遵循“先父后子”的原则,从加载到初始化,都是先处理父类,再处理子类。理解这一顺序对于理解和优化代码、避免潜在问题至关重要。同时,Java的类加载机制还支持动态加载和灵活的代码...
java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....
Java中类的加载顺序执行结果 Java 中类的加载顺序执行结果是指在 Java 语言中,类的加载顺序执行结果是如何进行的。下面我们将详细介绍 Java 中类的加载顺序执行结果的相关知识点。 类的加载 在 Java 语言中,类...
子类会继承父类的成员变量和方法,而父类的加载顺序也会对子类产生影响。在上面的例子中,SubClass是SuperClass的子类,因此在加载SubClass之前,需要先加载SuperClass。 static代码块的加载时间 static代码块是在...
- 在类加载器设置界面,找到`类加载顺序`选项,这通常默认为“父类优先”(parent first)。 - 修改为“子类优先”(parent last),这意味着应用类加载器会首先尝试加载类,如果找不到再由父类加载器加载。 3. *...
总结来说,Java中类的加载顺序是基于以下规则的: - 首次使用类时,加载类并初始化静态部分。 - 创建类的实例时,按照继承顺序从父类到子类初始化非静态部分。 - 对象销毁时,先执行子类的`finalize`,再执行父类的`...
在Java中,类的加载顺序遵循“父类优先”原则,即子类在初始化前,其父类必须先完成初始化。同时,如果一个类没有显式地定义初始化块,JVM会自动提供一个空的方法。 至于文件`任务安排表.xls`,虽然与Java类的运行...
Java继承关系类加载顺序问题详解 在Java中,类加载顺序问题是开发中经常遇到的问题之一。今天,我们来详解Java中继承关系类加载顺序问题,包括类加载顺序、构造方法调用顺序、静态代码块执行顺序等。 首先,让我们...
Java中的类加载顺序是编程面试中常见的问题,它涉及到Java虚拟机(JVM)的工作机制。下面我们将详细探讨这个问题,并基于提供的代码实例进行解析。 首先,我们了解类加载的基本顺序: 1. **静态变量和静态初始化块...
本文将深入探讨在继承中的程序执行顺序,以及子类与父类的执行顺序问题。 首先,我们需要了解Java或Python等面向对象语言中类的构造过程。当一个类实例化时,其构造函数(在Java中是`构造器`,在Python中是`__init_...
当创建一个子类对象时,其内存加载顺序遵循以下规则: 1. **静态初始化块**:首先执行的是类中的静态初始化块,无论类被实例化多少次,静态初始化块只执行一次。这部分代码用于初始化类级别的静态变量。 2. **父类...
在Java编程语言中,类继承是面向对象设计的一个核心特性,它允许我们创建一个新类(子类)作为现有类(父类)的扩展。当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、...
类加载的顺序是按照父类到子类的顺序进行的,即父类的静态变量会先被初始化,接着是子类的静态变量。然后,父类的非静态成员变量会被初始化,接着是子类的非静态成员变量。 在Java类加载初始化的过程中,还有一些...
例如,`ParentLastClassLoader.java`可以重写`loadClass()`方法,使得父类加载器在子类加载器尝试加载失败后才介入。 `FileSystemClassLoader.java`是一个简单的类加载器实现,它可以从文件系统加载类。而`...
在 Java 语言中,代码块和静态代码块的加载顺序是严格按照类的加载顺序执行的。具体来说,类的加载顺序如下: 1. 父类静态代码块 2. 子类静态代码块 3. 父类实例代码块 4. 子类实例代码块 在上面的实例代码中,...
需要注意的是,如果父类中有参数化的构造器,而在子类中没有显式调用它,Java会自动添加一个`super()`调用来确保父类的构造器被调用。此外,静态成员不会因为创建类的实例而重新初始化,它们只在类加载时初始化一次...