从书中读取重载的构造函数后,我厌倦了以下代码:
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并且没有在参数中传递任何参数,是不是要先调用第一个构造函数?
答案 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
。这就是它的执行方式:
main
方法时,将调用第一个构造函数new Employee()
。JJ 2nd 0
,然后完成。System.out.println(name +" "+ idNumber);
,并打印JJ 0
。