简单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回答实际问题。“那两行会打印什么?”