2011-01-10 2 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 появляется в place.ie, будет вызываться параметрCtor (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; 
} 

в противном случае, вы просто повторно назначая a и b параметров для себя.

3

это называется variable shadowing и значение междунар по умолчанию 0

сделать это как

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

Также см

0

T его код

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

} 
Смежные вопросы