以下程序将输出显示为
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();
}
}
是什么原因?
答案 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;
}
否则,您只需将a
和b
参数重新分配给自己。
答案 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]);
}
}