繁体   English   中英

重载的构造函数

[英]Overloaded constructors

从书中阅读重载的构造函数后,我厌倦了以下代码:

public class Employee {

    String name;
    int idNumber;

    public Employee(){
        this("JJ", 0);
        System.out.println(name +" "+ idNumber);
    }

    public Employee(String name, int num){

        this.name = name;
        idNumber = num;
        System.out.println(name +" 2nd "+ idNumber);
    }
}


public class Object1 {

    public static void main(String[] args) {

        Employee emp = new Employee();
    }

}

输出:

JJ 2nd 0

JJ 0

我真的很困惑。 为什么先打印“ JJ 2nd 0”然后打印“ JJ 0”? 我创建了一个雇员对象emp,并且没有在参数中传递任何参数,不是应该首先调用第一个构造函数吗?

new Employee(); 正在调用

public Employee(){
    this("JJ", 0);
    System.out.println(name +" "+ idNumber);
}

在这个构造函数中

this("JJ", 0);

正在调用

public Employee(String name, int num)

构造函数,以call结尾

System.out.println(name +" 2nd "+ idNumber);

负责打印

JJ 2nd 0

this("JJ", 0); 将完成System.out.println(name +" "+ idNumber); 将被调用,您应该看到另一行

JJ 0

当你写:

... new Employee();

您最终将调用默认(无参数)构造函数。 该构造函数中的第一行代码是:

this("JJ", 0);

调用2参数构造函数,在其中编写

System.out.println(name +" 2nd "+ idNumber);

这是程序遇到的两个输出语句中的第一个,因此也是您在控制台中看到的第一件事。

在该输出语句之后,程序将返回默认的无参数构造函数,并继续执行您的其他输出语句

System.out.println(name +" "+ idNumber);

您看到的是“第二个”输出语句。

如果您使用调试器逐步执行代码,那么请逐行进行操作,您将确切地看到程序的执行方式,并应演示我所指的内容。

无参数构造函数正在使用带有以下行的参数调用另一个构造函数:

this("JJ", 0);

您必须为此阅读this关键字,对于初学者来说,您喜欢的类的对象和对象,

                       See in the first constructor this("JJ","0") means that a constructor having two arguments is being invoked so the first line redirects the control into the second constructor that's is why the other line is printed first.

它确实首先调用第一个构造函数,但其​​中的第一行是对第二个构造函数的调用。 main方法创建Employee对象时,将调用不带参数的构造函数Employee() (第一个)。 该构造函数首先调用第二个构造函数,后者打印JJ 2nd 0 ,然后,第一个构造函数打印行JJ 0 这是如何执行的:

  1. 调用main方法时,将调用第一个构造函数new Employee()
  2. 构造函数调用第二个构造函数。
  3. 第二个构造函数打印JJ 2nd 0 ,然后完成。
  4. 第一个构造函数继续下一行,即System.out.println(name +" "+ idNumber); ,并打印JJ 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM