`
leozam
  • 浏览: 29051 次
社区版块
存档分类
最新评论

Java父类子类 类加载顺序

 
阅读更多
首先看代码,猜猜结果
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中父类与子类的加载顺序详解

    以下是Java中父类与子类加载顺序的详细解释: 1. **静态初始化**: - 首先,JVM会加载类的静态部分。这意味着先加载所有静态变量的初始化,并执行静态初始化块(如果有的话)。在给定的例子中,无论父类还是子类,...

    Java虚拟机类加载顺序

    ### Java虚拟机类加载顺序详解 #### 一、引言 在Java开发中,了解类是如何被加载到Java虚拟机(JVM)中的至关重要。本文将详细介绍JVM中的类加载顺序及其背后的原理,帮助读者理解这一过程,并掌握如何利用类加载...

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

    本文将深入分析Java中子类继承父类时的程序运行顺序,这对于理解面向对象编程的执行机制至关重要。 首先,我们需要明确Java程序的执行流程。当一个类被加载时,会按照以下顺序执行: 1. **静态变量初始化**:首先...

    java 继承关系的加载顺序

    总结,Java中继承关系的加载顺序遵循“先父后子”的原则,从加载到初始化,都是先处理父类,再处理子类。理解这一顺序对于理解和优化代码、避免潜在问题至关重要。同时,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 中类的加载顺序执行结果的相关知识点。 类的加载 在 Java 语言中,类...

    实例解析JAVA中代码的加载顺序

    子类会继承父类的成员变量和方法,而父类的加载顺序也会对子类产生影响。在上面的例子中,SubClass是SuperClass的子类,因此在加载SubClass之前,需要先加载SuperClass。 static代码块的加载时间 static代码块是在...

    websphere6,7上修改类装载顺序为应用程序优先

    - 在类加载器设置界面,找到`类加载顺序`选项,这通常默认为“父类优先”(parent first)。 - 修改为“子类优先”(parent last),这意味着应用类加载器会首先尝试加载类,如果找不到再由父类加载器加载。 3. *...

    详解Java中类的加载顺序

    总结来说,Java中类的加载顺序是基于以下规则的: - 首次使用类时,加载类并初始化静态部分。 - 创建类的实例时,按照继承顺序从父类到子类初始化非静态部分。 - 对象销毁时,先执行子类的`finalize`,再执行父类的`...

    Java类的基本运行顺序

    在Java中,类的加载顺序遵循“父类优先”原则,即子类在初始化前,其父类必须先完成初始化。同时,如果一个类没有显式地定义初始化块,JVM会自动提供一个空的方法。 至于文件`任务安排表.xls`,虽然与Java类的运行...

    详解java中继承关系类加载顺序问题

    Java继承关系类加载顺序问题详解 在Java中,类加载顺序问题是开发中经常遇到的问题之一。今天,我们来详解Java中继承关系类加载顺序问题,包括类加载顺序、构造方法调用顺序、静态代码块执行顺序等。 首先,让我们...

    Java中类的加载顺序剖析(常用于面试题)

    Java中的类加载顺序是编程面试中常见的问题,它涉及到Java虚拟机(JVM)的工作机制。下面我们将详细探讨这个问题,并基于提供的代码实例进行解析。 首先,我们了解类加载的基本顺序: 1. **静态变量和静态初始化块...

    再次详细说明在继承中的程序执行顺序,子类与父类到底哪个先执行

    本文将深入探讨在继承中的程序执行顺序,以及子类与父类的执行顺序问题。 首先,我们需要了解Java或Python等面向对象语言中类的构造过程。当一个类实例化时,其构造函数(在Java中是`构造器`,在Python中是`__init_...

    javase子类父类继承关系图解

    当创建一个子类对象时,其内存加载顺序遵循以下规则: 1. **静态初始化块**:首先执行的是类中的静态初始化块,无论类被实例化多少次,静态初始化块只执行一次。这部分代码用于初始化类级别的静态变量。 2. **父类...

    Java类继承初始化顺序

    在Java编程语言中,类继承是面向对象设计的一个核心特性,它允许我们创建一个新类(子类)作为现有类(父类)的扩展。当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、...

    Java类加载初始化的过程及顺序

    类加载的顺序是按照父类到子类的顺序进行的,即父类的静态变量会先被初始化,接着是子类的静态变量。然后,父类的非静态成员变量会被初始化,接着是子类的非静态成员变量。 在Java类加载初始化的过程中,还有一些...

    Java类加载机制学习1

    例如,`ParentLastClassLoader.java`可以重写`loadClass()`方法,使得父类加载器在子类加载器尝试加载失败后才介入。 `FileSystemClassLoader.java`是一个简单的类加载器实现,它可以从文件系统加载类。而`...

    java 代码块与静态代码块加载顺序

    在 Java 语言中,代码块和静态代码块的加载顺序是严格按照类的加载顺序执行的。具体来说,类的加载顺序如下: 1. 父类静态代码块 2. 子类静态代码块 3. 父类实例代码块 4. 子类实例代码块 在上面的实例代码中,...

    JAVA类的初始化顺序文.pdf

    需要注意的是,如果父类中有参数化的构造器,而在子类中没有显式调用它,Java会自动添加一个`super()`调用来确保父类的构造器被调用。此外,静态成员不会因为创建类的实例而重新初始化,它们只在类加载时初始化一次...

Global site tag (gtag.js) - Google Analytics