简单的Java构造函数

时间:2012-08-14 14:38:27

标签: 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, 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

6 个答案:

答案 0 :(得分:2)

this(num,num+1);

在同一个对象

中调用构造函数
public Base(int num1, int num2){

为什么?

如果用户通过使用单个参数调用构造函数为Base创建了一个对象,则您的代码会在上面的构造函数中执行一些默认计算,并设置num2diff值。

答案 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

由于构造函数是链接的,因此使用b1public 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 == 5num2 == 6,即提供的数字加1。

答案 5 :(得分:0)

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

Base constructor2
Base constructor1
Base constructor2

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