【Java】关于构造函数
我简单地总结了一下。
构造函数是一个什么概念
- 
インスタンス化のタイミングで呼び出される特殊なメソッド
 
- インスタンス化のタイミングで呼び出される特殊なメソッド
 
- コンストラクターではメンバー変数の初期化など、事前処理系を記述するのが一般的
 
首先,我们来执行以下的示例代码。
public class Person {
  public String name;
  public int age;
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  public Person() {
    this("えんどうゆうき", 27);
  }
  public void show() {
    System.out.printf("%s(%d歳)です。\n", this.name, this.age);
  }
}
public class ConstructorBasic {
  public static void main(String[] args) {
    var p = new Person();
    p.show();
  }
}
えんどうゆうき(27歳)です。
处理成功。
如果更改了此处超载的构造函数的参数,则执行结果将不同。
  public Person() {
    this("えんどうゆず", 10);
  }
执行结果
えんどうゆず(10歳)です。
如果在重载构造函数中不使用this关键字进行构造函数调用,则执行结果如下。
  public Person() {
  }
null(0歳)です。
这是因为成员变量具有零值。※局部变量必须进行初始化。
我曾经以为如果不进行构造函数的重载就不会出错,但是出现了以下错误。
public class Person {
  public String name;
  public int age;
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
    /*
     * public Person() { this("えんどうゆず", 10); }
     */
  public void show() {
    System.out.printf("%s(%d歳)です。\n", this.name, this.age);
  }
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    コンストラクター Person() は未定義です
但是只要以下的话就不会出错。
public class Person {
  public String name;
  public int age;
    /*
     * public Person(String name, int age) { this.name = name; this.age = age; }
     * 
     * public Person() { this("えんどうゆず", 10); }
     */
  public void show() {
    System.out.printf("%s(%d歳)です。\n", this.name, this.age);
  }
}
null(0歳)です。
这是因为默认构造函数是隐式生成的。
如果只定义了具有参数的构造函数,那么不会生成默认构造函数。只有当存在可调用的构造函数时,才会判定为错误。
只要移除构造函数的参数,就不会报错。它引用了成员变量的零值。
public class Person {
  public String name;
  public int age;
  public Person() {
    this.name = name;
    this.age = age;
  }
  public void show() {
    System.out.printf("%s(%d歳)です。\n", this.name, this.age);
  }
}
null(0歳)です。
描述并重载接受参数的构造函数流程是标准的。
文献引用
自学Java最新版
请提供一个提示文本来指导处理您的请求。