2012-08-14 97 views
0

对于下面的代码行:简单的Java构造

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; 
    } 
} 

应该怎样那些2线打印?

Base b1 = new Base(10); 
Base b2 = new Base(4,7); 

我想,如果我要了解以下行:this(num,num+1);我就明白了一切...

日Thnx

+0

请尝试并缩进您的代码。使它更容易阅读 – 2012-08-14 14:39:28

+1

this(num,num + 1);调用public Base(int num1,int num2) – NimChimpsky 2012-08-14 14:40:11

+1

如果你在调试器中遍历你的代码,你可以看到每行代码。 – 2012-08-14 14:54:05

回答

2
this(num,num+1); 

通话按照同一对象的构造

public Base(int num1, int num2){ 

为什么?

如果用户通过调用构造函数与单PARAM创建的对象为Base,您的代码不会在上面构造了一些默认的计算,并num2diff值。

0
Base b1 = new Base(10); 
Base b2 = new Base(4,7); 

这将打印出:

基地constructor2

基地constructor1

基地constructor2

由于构造函数链中,第一个构造函数被调用的实例化(public Base(int num1))调用其他构造函数(public Base(int num1, int num2)),它打印出“Base constructor2”,然后执行返回以打印出“Base constructor1”。

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

+0

@Lunar:当您发布此评论时,我相信我处于更新中,谢谢。 – 2012-08-14 14:47:38

0

既然你传递一个整数参数的第一个电话:

Base b1 = new Base(10); 

它会调用构造函数只有一个整型参数,并打印出:

Base constructor1 

第二次调用传入两个整数参数,所以它会调用带有两个整数参数的构造函数并打印出来:

Base constructor2 

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

2

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

Base constructor2 

Base constructor1 

而第二个是简单的。这将打印

Base constructor2 
+0

+1用于回答实际问题。 “那两行会打印什么?” – km1 2012-08-15 13:52:38

0

当你调用具有多个定义的功能,像

public Base(int num) 

VS

public Base(int num1, int num2) 

的一个依据是什么参数,你用选择。所以,通过调用

new Base(5); 

你会碰到第一个构造函数,只有一个int。

此构造说,“好,我想这两个定义,但我只有一个号码。让我们称之为第二构造,只是让num2等于这个第一号加1。

this(num,num+1); //num == 5 

电话

Base(int num1, int num2) 

其中将其提供num1 == 5,和num2 == 6,这是所提供的号加1。

0

如果哟ü要运行这两条线,你会看到...

Base constructor2 
Base constructor1 
Base constructor2 

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