簡體   English   中英

構造函數重載示例中的混淆

[英]Confusion in Constructor Overloading Example

以下程序將輸出作為

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

}

是什么原因?

默認情況下,未初始化的私有變量a和b設置為零。 並且重載c'tctor到位。我將從main調用parameterCtor(int a,int b),並且局部變量a和b設置為3和1,但類變量a和b仍為零。 因此,a = 0,b = 0(不會調用默認的c'tor)。

要設置類變量,請使用:

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

你需要這樣做:

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

否則,您只需將ab參數重新分配給自己。

這稱為variable shadowing ,int的默認值為0

讓它變得像

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

另見

使用

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

代替

a = a;
b = b;

使用

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

代替

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

}

這段代碼

a=a;
b=b;

將'a'中的值賦給參數'a'。 你的意圖很可能是什么。

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

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

你有一個叫做局部變量a叫成員變量a ,所以你需要使用this.a指成員變量,作為a指的是局部變量。

重命名局部變量以使其與成員變量不同可能是更好的主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM