[英]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
。 这是如何执行的:
main
方法时,将调用第一个构造函数new Employee()
。 JJ 2nd 0
,然后完成。 System.out.println(name +" "+ idNumber);
,并打印JJ 0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.