0 0

关于构造方法调用的问题20

现在这样一个问题,不明白想请会的讲解下,问题如下:
现有三个类: 一个Father类,一个Son类,继承Father类,一个测试类Test,代码如下:
public class Father { 
 public int value=100;             // 这里为1
 public Father(){                  // 这里为2
  int i=20;                // 这里为3
  System.out.println(i);   // 这里为4
 }
}

public class Son extends Father {
 public int id=200;                  // 这里为5
 public Son(){                       // 这里为6
  int j=10;           // 这里为7
  System.out.println(j);     // 这里为8
 }
}

public class Test{
    public static void main(String[] args){
        Father f=new Son();                   // 这里为9
    }
}

现在我在Test中的主方法main那里设置断点:用debug as 调试,只按F5,
我想问下为什么执行顺序会是:9→6→2→1→3→4→5→7→8→9
请各位大神级人物讲解下,尤其为什么有1与5这两个步骤,还有从9到6再到2,好像没有进入构造方法内部,这样子调用起什么作用,或者有什么含义?

2012年7月18日 09:51

4个答案 按时间排序 按投票排序

0 0

采纳的答案

这是因为继承。继承的话一定是先初始化父辈的属性和方法,这样暴露给后辈的方法或属性才能被使用。
9到6不用说了吧。说到6以后,由于son是继承了father的,所以会到2,这里其实是进入了son的构造方法。你可以在son的构造方法第一行写super()看会不会执行这一句。当然,如果你不直接写的话编译器会为你指定一个无参的父类构造方法,在这里是2。到达2后,依次初始化其中的属性,初始化后调用father这个构造方法(构造方法可以看成是一个特殊的方法,在别人调用这个方法时,会先把类中的属性进行一次初始化),就会看到执行1后接着执行3和4

2012年7月18日 15:15
0 0

当我们首次主动使用类的时候会导致类的初始化。然而类的初始化顺序如下:
1. 首先初始化该类的静态的成员变量或或者静态方法,静态代码块,这些静态的东西按照出现在类中的顺序初始化。
2. 初始化完静态的成员变量和静态代码块后就要初始化非静态的,同样的,非静态的成员变量,非静态的代码块也按照出现的顺序初始化。
3. 上面的两个步骤走完之后就初始化构造方法。

但是,一个子类的初始化必将导致父类的初始化。意思就是说,子类初始化之前需要先初始化父类,因为可能我们需要在子类中引用父类中的数据。

希望这样的讲解,能够帮到你。

2012年7月19日 20:16
0 0

在执行子类的构造方法时,默认会先执行super()这个方法,是指父类的构造方法,所以这时会去初始化父类,父类初始化完了后,才执行子类构造方法的后面的代码

2012年7月18日 10:15
0 0

对于java继承的初始化,原则是:先父类,后子类;在同一个类里是先变量与代码块,后构造函数

2012年7月18日 10:04

相关推荐

    浅谈Java程序中的构造方法调用.pdf

    Java 程序中的构造方法调用 Java 程序设计语言中的构造方法是一个特殊的成员方法,它专门用于创建对象和对所创建的对象进行初始化。正确调用构造方法是我们设计程序的关键所在。构造方法的调用方式有三种:一是在...

    NDK开发之C语言调用Java构造方法、父类方法、返回中文字符串乱码问题案例

    关于调用Java构造方法,你可以这样做: ```c++ jclass javaClass = env->FindClass("com/example/YourJavaClass"); jmethodID constructor = env->GetMethodID(javaClass, "<init>", "()V"); jobject javaObject = ...

    构造方法JAVA构造方法

    当我们创建一个类的新实例时,Java会自动调用对应的构造方法来设置对象的初始状态。 ### 1. 构造方法的作用 - **初始化对象**:构造方法的主要目的是为新创建的对象设置初始值,确保对象处于可使用的状态。 - **...

    详解 Java继承关系下的构造方法调用

    Java继承关系下的构造方法调用详解 Java继承关系下的构造方法调用是Java语言中一个非常重要的概念,它关系到类的继承和对象的实例化。在Java中,创建一个类的对象时,如果该类存在父类,则先调用父类的构造方法,...

    java构造方法

    #### 六、构造方法调用的顺序 在类的继承结构中,构造方法的调用顺序遵循自底向上的原则,即从最底层的子类开始,逐级向上调用父类的构造方法,直到到达最顶层的基类(通常是`Object`类)为止。这一过程确保了所有...

    Java的子类调用父类的构造方法.pdf

    Java的子类调用父类的构造方法.pdf

    java 构造方法的资源

    当一个类继承自另一个类时,子类的构造方法可以使用`super`关键字调用父类的构造方法,确保父类的状态得到正确初始化。例如: ```java public class Student extends Person { private String major; public ...

    java 构造器的调用

    在Java编程语言中,构造器(Constructor)是一个特殊的方法,主要负责对象的初始化工作。当创建一个新的类实例时,构造器会被自动调用。构造器的名称必须与类名完全相同,且没有返回类型,包括void。理解并熟练运用...

    winform 构造方法中调用虚方法源码

    本资源提供的"winform 构造方法中调用虚方法源码"是一个关于面向对象编程的实例,探讨了如何在WinForm控件的构造函数中调用虚方法。 在C#或.NET编程中,构造函数是类的一个特殊方法,用于初始化新创建的对象。而虚...

    java中带有不同构造方法的程序内存分析

    当创建对象时,如果没有指定构造方法,系统会调用默认的无参构造方法。这种情况下,内存分配的过程通常是:在堆内存中为新对象分配空间,然后调用构造方法进行初始化。 然而,有时我们需要更复杂的初始化,这时就...

    类继承构造方法super()调用可以吃吗

    ### 类继承构造方法super()调用解析 在Java编程语言中,类的继承是一个非常重要的概念,它允许我们创建一个新类(子类)来继承现有类(父类)的属性和方法。本文将深入探讨Java中如何通过`super()`关键字来调用父类...

    子类对象构建调用父类的构造方法

    程序中描述了子类对象构建调用父类的构造方法,以及类变量和实例变量创建的不同过程

    java中的继承(子类调用父类构造方法还不懂).doc

    Java 中的继承(子类调用父类构造方法还不懂) Java 中的继承是指一个类可以继承另一个类的属性和方法,这样可以实现代码的复用和提高开发效率。在 Java 中,继承使用关键字 `extends` 来实现。 Java 中继承的注意...

    Java 构造方法

    当一个对象被创建时,构造方法会被自动调用,为对象的成员变量赋值,进行必要的设置,确保对象处于正确的初始状态。 在Java中,构造方法有以下特征: 1. **命名规则**:构造方法与类名完全相同,包括大小写。例如,...

    Java使用this关键字调用本类中的重载构造方法.pdf

    在类的构造方法中,`this`关键字可以用来调用同一类中的其他重载构造方法,以便于代码的复用和简化。这个特性使得开发者能够更高效地管理对象的初始化过程。 首先,我们要理解构造方法的作用。构造方法是Java类中...

    Java构造方法.pdf

    * 一般的方法是在需要时才调用,而构造方法则是在创建对象时,便自动调用,并执行构造方法的内容。 构造方法的作用 构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。基于上述...

    Java中构造方法被别封装后的调用.docx

    ### Java中构造方法被封装后的调用 #### 知识点概述 在Java语言中,封装是面向对象编程的一个核心特性,它通过隐藏对象的实现细节,并对外提供接口来进行交互,以此来保护数据的安全性和提高代码的可维护性。封装...

    java面试题静态加载顺序构造方法

    Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 ...2、调用类的构造方法时先调用父类的构造方法,在调用子类的构造方法 3、类初始化时,先初始化类的属性成员,在执行构造方法。

    构造方法11_2.zip

    - 如果子类没有定义任何构造方法,它将自动获得一个默认构造方法,该构造方法会调用父类的无参构造方法。 7. **this关键字在构造方法中的使用**: - `this`关键字在构造方法中可以用来引用当前对象,常用于调用本...

Global site tag (gtag.js) - Google Analytics