构造函数,新关键字

时间:2016-08-10 15:23:25

标签: java

class Student {
  int id;
  String name;

  Student() {
    System.out.println("default");
  }

  Student(int id, String name) {
    this();

    this.id = id;
    this.name = name;
  }

  Void display() {
    System.out.println(id + "" + name);
  }

  public static void main(String args[]) {
    Student e1 = new Student(111, "karan");
    e1.display();
  }
}

输出结果是:

default
111 karan.

我不明白为什么会输出默认值,我称为有参数的构造函数

4 个答案:

答案 0 :(得分:2)

带参数的构造函数中的

 Student(int id, String name){
   this();

   this.id=id;
   this.name=name;
 }

在第一行中调用this();

那就是调用构造函数whitout参数。

 Student(){
   System.out.println("default");
 }

结果是:

default
111karan

通常你不会调用其他构造函数,所以删除this();在带有参数的构造函数中

Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

所以你会有

111karan

答案 1 :(得分:1)

看起来你正在"默认"在输出中,因为你正在调用this();在参数化构造函数中。

答案 2 :(得分:0)

你正在打电话

this()

在第二个构造函数(带参数的构造函数)中。这意味着第一个构造函数被调用,因此它打印“default”。然后它像往常一样继续。尝试注释(如果您以后可能需要它),或删除第二个构造函数中的第一行。它应该是:

Student(int id, String name){
    this.id=id;
    this.name=name;
}

编辑:我假设当你说它打印出“默认111 karan”时,你并不是说它全部在控制台的同一行。如果是这样,System.out.println()出现了一些奇怪的错误。

答案 3 :(得分:0)

Student(int id, String name){
    this(); // You are calling the constructor with no arguments

    this.id=id;
    this.name=name;
}