构造函数重载示例中的混淆

时间:2011-01-10 11:38:01

标签: java

以下程序将输出显示为

 I am Parameterized Ctor
 a = 0
 b = 0

public class ParameterizedCtor {

    private int a;
    private int b;

    public ParameterizedCtor() {
        System.out.println("I am default Ctor");
        a =1;
        b =1;
    }

    public ParameterizedCtor(int a, int b) {
        System.out.println(" I am Parameterized Ctor");
        a=a;
        b=b;

    }
    public void print() {
        System.out.println(" a = "+a);
        System.out.println(" b = "+b);
    }

    public static void main(String[] args) {

        ParameterizedCtor c = new ParameterizedCtor(3, 1);
        c.print();
    }

}

是什么原因?

8 个答案:

答案 0 :(得分:14)

默认情况下,未初始化的私有变量a和b设置为零。并且重载c'tctor到位。将从main和局部变量a&中调用parameterCtor(int a,int b)。 b设置为3和1,但类变量a和b仍为零。因此,a = 0,b = 0(不会调用默认的c'tor)。

要设置类变量,请使用:

this.a = a;
this.b = b;

答案 1 :(得分:6)

你需要这样做:

public ParameterizedCtor(int a, int b) {
    System.out.println(" I am Parameterized Ctor");
    this.a=a;
    this.b=b;
}

否则,您只需将ab参数重新分配给自己。

答案 2 :(得分:3)

这称为variable shadowing,默认值int为0

使其像

 public ParameterizedCtor(int a, int b) {
        System.out.println(" I am Parameterized Ctor");
        this.a=a;
        this.b=b;
 }  

另见

答案 3 :(得分:1)

使用

this.a = a;
this.b = b;

而不是

a = a;
b = b;

答案 4 :(得分:1)

使用

this.a = a;
this.b = b;

而不是

a = a;
b = b;

答案 5 :(得分:0)

此代码

a=a;
b=b;

将'a'中的值赋给参数'a'。你的意图可能是什么。

this.a=a;
this.b=b;

BTW:这在我的IDE中显示为警告。

答案 6 :(得分:0)

您有一个名为a的局部变量和一个名为a的成员变量,因此您需要使用this.a来引用成员变量,因为a指的是局部变量。

重命名局部变量以使其与成员变量不同可能是更好的主意。

答案 7 :(得分:0)

public class thisDemo {
    public int x=1;
    public int y=2;

    String[] l=new String[1];String[] m=new String[1];String[] n=new String[1];

   public thisDemo(int a,int b)
           {
               this.x=14;
               this.y=4;
           }
   public thisDemo(String a[],String b[],String c[])
   {
       this.l[0]=a[0];
       this.m[0]=b[0];
       this.n[0]=c[0];
   }
   public thisDemo()
   {

   }
    public static void main(String[] args)
    {
        thisDemo thi=new thisDemo(2, 3);
        System.out.println(thi.getClass());
        System.out.println(thi.x+" "+thi.y);

        thisDemo td=new thisDemo();
        System.out.println(td.getClass());
        System.out.println("x="+td.x+"y="+td.y);

        String xA[]={"a"};
        String yA[]={"b"};
        String zA[]={"c"};
       thisDemo tsd=new thisDemo(xA,yA,zA);
       System.out.println(tsd.getClass());
       System.out.println(tsd.l[0]+" "+tsd.m[0]+" "+tsd.n[0]);
    }

}