[英]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;
}
否則,您只需將a
和b
參數重新分配給自己。
這稱為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.