2011-01-10 69 views
9

下面的程序給出作爲混亂在構造重載例

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

} 

的原因是什麼輸出?

回答

14

未初始化的私有變量a和b默認設置爲零。重載c_tctor到位.ie,parameterCtor(int a,int b)將從main調用,並且局部變量a & b被設置爲3和1,但類變量a和b仍然爲零。因此,a = 0,b = 0(默認c'tor不會被調用)。

要設置類變量,使用:

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

你需要這樣做:

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

否則,你只是重新分配ab參數自己。

3

這就是所謂的variable shadowing和INT的默認值是0

使它像

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

請參見

0

ŧ他的代碼

a=a; 
b=b; 

將'a'中的值分配給參數'a'。你想要的可能是什麼。

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

順便說一句:這在​​我的IDE中顯示爲警告。

0

您有一個名爲a一個局部變量,並呼籲a一個成員變量,所以你需要使用this.a指成員變量,如a指的是局部變量。

重命名局部變量以使其與成員變量不相同可能是一個更好的想法。而不是

1

使用

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

,而不是

a = a; 
b = b; 
1

使用

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

a = a; 
b = b; 
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]); 
    } 

}