`
hy90171
  • 浏览: 59159 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java构造函数的执行

    博客分类:
  • java
 
阅读更多

java在创建对象的时候会要执行它的构造函数。不仅如此,java还要执行父类的构造函数,往上一级一级直到没有父类为止。对于初学者来说,有三个问题不容易搞懂:

1、父类的构造函数是否一定会执行?

  2、是先执行子类的构造函数还是先执行父类的构造函数?

  3、如果父类有多个构造函数,那么 Java 会选择哪一个?

  - 父类的构造函数是否一定会执行?

  是的,父类的构造函数一定会执行。所以如果某个类的层次很深,那么它创建对象时就会要执行一大堆的构造函数。

  - 是先执行子类的构造函数还是先执行父类的构造函数?

  Java 会顺着继承结构往上一直找到 Object,然后从 Object 开始往下依次执行构造函数。先执行父类的构造函数,那么子类的构造函数执行的时候就不需要担心父类的成员是否初始化好了。

  - 如果父类有多个构造函数,那么 Java 会选择哪一个?

  如果父类有多个构造函数,那么子类可以在构造函数中选择其中一个(且最多只能选择一个)来执行。如果子类没有选择,那么 Java 将会执行父类的缺省构造函数。下面是一个例子:

 父类:

public class SuperClass {

    public SuperClass(){
        System.out.println("super class constructed.");
    }

    public SuperClass(String name){
        System.out.println("super class constructed with name: " + name);
    }
}

public class SuperClass {

    public SuperClass(){
        System.out.println("super class constructed.");
    }

    public SuperClass(String name){
        System.out.println("super class constructed with name: " + name);
    }
}

  子类:

public class SubClass extends SuperClass {

    public SubClass(){

        System.out.println("sub class constructed.");

    }

    public SubClass(String name){

        // 这一句在语法上不是必须的。但有没有这一句,执行起来不一样。有了这一句,就表示子类的构造过程中调用

        // 的是父类的带字符串参数的构造函数,也就是 public SuperClass(String name) 这个方法。如果没有这一

        // 句,就表示子类的构造过程中调用的是父类的缺省构造函数。

        super(name);

        System.out.println("sub class constructed with name: " + name);

    }

    public static void main(String[] args) {

        new SubClass();

        new SubClass("world");

    }

}

 

分享到:
评论

相关推荐

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

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

    Java继承时构造函数的调用

    这是因为在子类的构造函数执行之前,总会先执行父类的构造函数,以确保父类的状态被正确初始化。 2. 如果父类没有无参数的构造函数,或者我们希望在子类构造时传递特定参数给父类,可以在子类的构造函数中使用`...

    Java构造函数的继承问题[收集].pdf

    以下是关于Java构造函数继承问题的关键知识点: 1. **继承默认构造函数**: - 子类只能继承父类的无参数(默认)构造函数。如果父类没有无参数的构造函数,那么子类无法直接继承任何构造函数。 - 缺省构造函数是...

    java二开面试笔试题

    本资源摘要信息中,我们将总结 Java 面试笔试题中的知识点,涵盖 Java 基础、Java 集合框架、Java垃圾回收、Java 方法返回值、Java 对象引用、Java 构造函数执行顺序等方面的知识点。 一、Java 基础知识点 1. Java...

    java构造函数及相关知识[借鉴].pdf

    Java构造函数是编程中至关重要的概念,特别是在面向对象编程中。它们主要用于初始化新创建的对象的状态。构造函数在类中定义,其名字与类名完全相同,并且没有返回类型,连void也不包含。当通过`new`关键字创建一个...

    Java:静态代码块和构造函数执行顺序

     3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private) */ public class Test{ public Test(){ System.out.println("类Test构造方法被执行 6"); } { System.out.println("类...

    深入理解java构造器机理

    “深入理解Java构造器机理” 在 Java 编程语言中,构造器是一种特殊的方法,用于初始化对象的创建。它是 Java 类中最重要的一个概念。下面将深入讨论构造器的机理、执行顺序、作用及与其他概念的区别。 一、构造器...

    18_构造函数 视频

    在Java编程语言中,构造函数是一种特殊的方法,它在创建对象时被自动调用,用于初始化新创建的对象。本视频“18_构造函数”深入探讨了Java中的构造函数概念,是JavaSE学习的重要组成部分。 首先,我们来理解构造...

    Java构造函数与普通函数用法详解

    Java构造函数与普通函数用法详解 Java构造函数和普通函数是Java语言的两个基本组成部分,它们在Java编程中扮演着非常重要的角色。下面我们将详细讲解Java构造函数和普通函数的用法和相关知识点。 一、函数的作用和...

    构造函数继承.关于java

    ### 构造函数继承在Java中的应用 构造函数继承是面向对象编程中一个重要的概念,尤其是在Java这样的语言中。本文将深入探讨构造函数继承的概念、原理及其在Java中的实现方式。 #### 构造函数的基本概念 在Java中...

    聚合中类的构造函数调用顺序

    1. **基类构造器的调用**:如果类A继承自类B,那么在类A的构造函数执行之前,会先调用类B的构造函数。这是为了确保基类的部分先得到初始化。 2. **成员变量构造器的调用**:接着,按照声明的顺序,类A中每个成员...

    java static块和构造函数的实例详解

    Java static 块和构造函数是 Java 编程语言中两个非常重要的概念,它们在 Java 程序的执行过程中扮演着重要的角色。今天,我们将深入探讨 Java static 块和构造函数的实例详解,帮助大家更好地理解和掌握 Java 编程...

    构造函数借鉴.pdf

    在Java编程语言中,构造函数是用来初始化对象的特殊方法。当创建一个类的实例时,构造函数会被调用。在涉及继承的情况下,构造函数的使用和调用规则变得更加复杂。以下是对构造函数继承问题的详细解释: 1. 缺省...

    java kok 构造与析构函数

    在Java编程语言中,"构造函数"和"析构函数"是两个关键概念,它们在对象的生命周期管理中起着至关重要的作用。首先,我们来深入理解这两个概念。 构造函数,顾名思义,是在创建类的对象时被调用的特殊方法。它的主要...

    【IT十八掌徐培成】Java基础第05天-01.回顾OOP-构造函数.zip

    这个默认构造函数不执行任何操作,只是简单地调用父类的无参构造函数。然而,一旦程序员在类中定义了一个构造函数,即使没有显示声明无参构造函数,编译器也不会提供它,因此需要程序员自己处理这种情况。 构造函数...

    14_构造函数 视频

    1. **无参构造函数**:默认的构造函数,没有参数,通常用于设置默认值或执行简单的初始化操作。 2. **有参构造函数**:允许传递参数,使得在创建对象时可以传入具体值,更灵活地初始化对象状态。 3. **构造函数...

    Java类的完整构造执行顺序

    在任何构造函数执行之前,所有成员变量都将被赋予默认值。对于基本数据类型,如`int`、`float`和`boolean`,它们的默认值分别为`0`、`0.0f`和`false`;而对于引用类型,其默认值为`null`。 ### 3. 构造函数的调用与...

    面向对象-构造函数-调用&内存图解

    构造函数执行时,会根据参数值设置对象的属性,这个过程称为实例化。一旦实例化完成,栈中的局部变量(构造函数参数)会被释放,但堆中的对象会继续存在,直到没有引用指向它,此时垃圾收集器会回收这块内存。 在...

    dotnet C# 如果在构造函数抛出异常 析构函数是否会执行.rar

    然而,如果你在构造函数中执行了资源分配(如使用`using`语句块分配了一个`IDisposable`对象),这些资源会在构造函数抛出异常后自动清理,因为`using`语句块相当于一个隐式的`try/finally`块,确保在发生异常时也会...

    【IT十八掌徐培成】Java基础第04天-05.构造代码块-构造函数-javabean-pojo.zip

    在这个【IT十八掌徐培成】的课程中,我们重点关注了Java基础知识的第四天内容,主要讲解了构造代码块、构造函数以及JavaBean和POJO的概念。下面我们将深入探讨这些关键知识点。 首先,构造代码块是在类中定义的一段...

Global site tag (gtag.js) - Google Analytics