重载的构造函数

时间:2014-12-22 20:53:32

标签: java constructor overloading

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

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并且没有在参数中传递任何参数,是不是要先调用第一个构造函数?

5 个答案:

答案 0 :(得分:5)

new Employee();正在调用

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

在此构造函数中

this("JJ", 0);

正在调用

public Employee(String name, int num)

构造函数,以调用结束

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

负责打印

  

JJ 2nd 0

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

  

JJ 0

答案 1 :(得分:4)

当你写道:

... new Employee();

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

this("JJ", 0);

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

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

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

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

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

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

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

答案 2 :(得分:2)

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

this("JJ", 0);

答案 3 :(得分:1)

您必须阅读有关此关键字的信息,仅限初学者使用的类似对象和

                       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.

答案 4 :(得分:0)

它首先调用第一个构造函数,但是它的第一行是对第二个构造函数的调用。从Employee方法创建main对象时,调用构造函数Employee(),不带参数(第一个)。该构造函数首先调用第二个构造函数,它打印JJ 2nd 0,然后,第一个构造函数打印行JJ 0。这就是它的执行方式:

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