对于以下代码行:
public class Base{
private int num1 = 0;
private int num2 = 0;
private static int dif = 0;
public Base(int num){
this(num,num+1);
System.out.println("Base constructor1");
}
public Base(int num1, int num2){
System.out.println("Base constructor2");
this.num1 = num1;
this.num2 = num2;
dif = num2 - num1;
}
public int sum(){
return num1 + num2;
}
public static int getDif(){
return dif;
}
}
这两行应该打印什么?
Base b1 = new Base(10);
Base b2 = new Base(4,7);
我想如果我理解以下内容:this(num,num+1);
我会理解一切......
日Thnx
答案 0 :(得分:2)
this(num,num+1);
在同一个对象
中调用构造函数public Base(int num1, int num2){
为什么?
如果用户通过使用单个参数调用构造函数为Base
创建了一个对象,则您的代码会在上面的构造函数中执行一些默认计算,并设置num2
和diff
值。
答案 1 :(得分:2)
第一个语句Base b1 = new Base(10);
是构造函数链接的一个例子,它会产生以下结果 -
Base constructor2
Base constructor1
第二个很简单。它会打印
Base constructor2
答案 2 :(得分:0)
Base b1 = new Base(10);
Base b2 = new Base(4,7);
这将打印出来:
基础构造函数2
基础构造函数1
基础构造函数2
由于构造函数是链接的,因此使用b1
(public Base(int num1)
)的实例化调用第一个构造函数,该实例化调用另一个构造函数(public Base(int num1, int num2)
),该构造函数打印出“Base constructor2” ,然后执行返回打印出“Base constructor1”。
b2
被实例化,只打印出“Base constructor2”,因为使用的构造函数不链接到另一个构造函数。
答案 3 :(得分:0)
由于您在第一次调用中传递了一个整数参数:
Base b1 = new Base(10);
它将仅使用一个整数参数调用构造函数并打印出来:
Base constructor1
第二个调用传入两个整数参数,因此它将使用两个整数参数调用构造函数并打印出来:
Base constructor2
我建议你自己测试一下,尝试一些东西可能是最容易学习和理解的方法。
答案 4 :(得分:0)
当您调用具有多个定义的函数时,例如
public Base(int num)
VS
public Base(int num1, int num2)
选择的选项取决于您使用的参数。所以,通过调用
new Base(5);
你将点击第一个构造函数,只有一个int。
这个构造函数说,“好吧,我想要两个都定义,但我只有一个数字。让我们调用第二个构造函数,让num2
等于第一个数加一个。
this(num,num+1); //num == 5
呼叫
Base(int num1, int num2)
提供的num1 == 5
和num2 == 6
,即提供的数字加1。
答案 5 :(得分:0)
如果您要运行这两行,您会看到......
Base constructor2
Base constructor1
Base constructor2
在你的控制台中,因为第一个对象声明会调用一个构造函数然后调用另一个,而第二个声明只会调用第二个构造函数。