0

对于以下代码行:

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);我会理解一切......

谢谢

4

6 回答 6

2
this(num,num+1);

在同一对象中调用以下构造函数

public Base(int num1, int num2){

为什么?

如果用户通过使用单个参数调用构造函数来创建对象Base,则您的代码会在上述构造函数和集合num2diff值中进行一些默认计算。

于 2012-08-14T14:39:36.853 回答
2

第一条语句Base b1 = new Base(10);是构造函数链接的示例,它将产生以下结果 -

Base constructor2 

Base constructor1

第二个很简单。它会打印

Base constructor2
于 2012-08-14T14:42:50.393 回答
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)),打印出“基础构造函数 2”,然后执行返回以打印出“基础构造函数 1”。

b2然后实例化并仅打印出“Base constructor2”,因为使用的构造函数没有链接到另一个构造函数。

于 2012-08-14T14:41:01.380 回答
0

由于您在第一次调用中传递了一个整数参数:

Base b1 = new Base(10);

它将仅使用一个整数参数调用构造函数并打印出:

Base constructor1

第二个调用传入两个整数参数,因此它将使用两个整数参数调用构造函数并打印输出:

Base constructor2

我建议自己测试一下,尝试一下可能是更好地学习和理解的最简单方法。

于 2012-08-14T14:42:39.717 回答
0

当您调用具有多个定义的函数时,例如

public Base(int num)

对比

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。

于 2012-08-14T14:42:58.007 回答
0

如果您要运行这两行,您会看到...

Base constructor2
Base constructor1
Base constructor2

在您的控制台中,因为第一个对象声明将调用一个构造函数然后另一个,而第二个声明只会调用第二个构造函数。

于 2012-08-14T14:43:27.697 回答