简单Java构造函数
对于以下代码行:简单Java构造函数,java,constructor,Java,Constructor,对于以下代码行: 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, i
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
在同一对象中调用以下构造函数
public Base(int num1, int num2){
为什么?
如果用户通过使用单个参数调用构造函数为Base
创建了一个对象,那么您的代码将在上述构造函数中执行一些默认计算,并设置num2
和diff
值
Base b1 = new Base(10);
Base b2 = new Base(4,7);
在同一对象中调用以下构造函数
public Base(int num1, int num2){
为什么?
如果用户通过使用单个参数调用构造函数为Base
创建了一个对象,那么您的代码将在上述构造函数中执行一些默认计算,并设置num2
和diff
值
Base b1 = new Base(10);
Base b2 = new Base(4,7);
这将打印出:
Base constructor1
Base constructor2
基本构造器2
基本构造器1
基本构造器2
由于构造函数是链接的,第一个构造函数通过实例化b1
(public Base(int num1)
)调用,后者调用另一个构造函数(public Base(int num1,int num2)
),后者打印出“Base constructor2”,然后执行返回打印出“Base constructor1”
b2
然后被实例化并只打印出“Base constructor2”,因为所使用的构造函数不会链接到另一个构造函数
这将打印出:
Base constructor1
Base constructor2
基本构造器2
基本构造器1
基本构造器2
由于构造函数是链接的,第一个构造函数通过实例化b1
(public Base(int num1)
)调用,后者调用另一个构造函数(public Base(int num1,int num2)
),后者打印出“Base constructor2”,然后执行返回打印出“Base constructor1”
b2
然后被实例化并只打印出“Base constructor2”,因为所使用的构造函数不会链接到另一个构造函数。因为您在第一次调用中传递了一个整数参数:
Base b1 = new Base(10);
它将仅使用一个整数参数调用构造函数并打印:
Base constructor1
Base constructor2
第二个调用传入两个整数参数,因此它将使用两个整数参数调用构造函数并打印:
Base constructor1
Base constructor2
我建议您自己测试,尝试是更好地学习和理解的最简单方法。因为您在第一次调用中传递了一个整数参数:
Base b1 = new Base(10);
它将仅使用一个整数参数调用构造函数并打印:
Base constructor1
Base constructor2
第二个调用传入两个整数参数,因此它将使用两个整数参数调用构造函数并打印:
Base constructor1
Base constructor2
我建议自己测试,尝试是更好地学习和理解的最简单方法。第一句话Base b1=new Base(10)
是构造函数链接的一个示例,它将产生以下结果-
Base constructor2
Base constructor1
第二个很简单。它会打印出来
Base constructor2
第一条语句Base b1=新的Base(10)
是构造函数链接的一个示例,它将产生以下结果-
Base constructor2
Base constructor1
第二个很简单。它会打印出来
Base constructor2
调用具有多个定义的函数时,如
public Base(int num)
vs
选择的参数取决于您使用的参数。所以,打电话
new Base(5);
您将命中第一个构造函数,只需一个int
这个构造函数说:“好吧,我想要两个都定义,但我只有一个数字。让我们调用第二个构造函数,使num2
等于第一个数字加上一
this(num,num+1); //num == 5
召唤
其中提供的num1==5
,以及num2==6
,这是提供的数字加1。当调用具有多个定义的函数时,如
public Base(int num)
vs
选择的参数取决于您使用的参数
new Base(5);
您将命中第一个构造函数,只需一个int
这个构造函数说,“好吧,我想要两个都定义,但我只有一个数字。让我们调用第二个构造函数,并使num2
等于第一个数字加上一
this(num,num+1); //num == 5
召唤
其中提供的num1==5
,以及num2==6
,这是提供的数字加上1。如果运行这两行,您将看到
Base constructor2
Base constructor1
Base constructor2
因为第一个对象声明会先调用一个构造函数,然后调用另一个构造函数,而第二个声明只会调用第二个构造函数。如果要运行这两行,您会看到
Base constructor2
Base constructor1
Base constructor2
因为第一个对象声明将先调用一个构造函数,然后调用另一个构造函数,而第二个声明将只调用第二个构造函数。请尝试缩进代码。使它更容易阅读(num,num+1);调用公共基(intnum1,intnum2),如果您在调试器中单步执行代码,您可以看到每一行的作用。请尝试缩进代码。使它更容易阅读(num,num+1);调用公共基础(int NUM1,int NUM2),如果你在调试器中通过你的代码,你可以看到每行的内容。@ No月:我相信当你发表这篇评论时,我正处于更新的中间,谢谢。@月亮:我相信我在更新的时候,你发表了这个评论,谢谢。+ 1回答实际问题。“这两行会打印什么?”+1回答实际问题。“那两行会打印什么?”