[Java] 构造函数是什么?
首先,我是一名初学者,希望通过撰写这篇文章来总结自己在Java方面的学习成果,包括通过阅读相关文本材料等途径进行的学习。
构造函数是什么?
这是指与类名相同的方法,在实例生成后自动执行的方法。
创建实例后,按照以下方式设置初始值。(因为新生成的实例字段(如name和hp)为空)
public class Main {
public static void main(String[] args) {
Hero h1 = new Hero();
h1.name = "タロウ";
h1.hp = 100;
...
}
}
在真实的开发现场中,由于通常需要多人合作进行开发,几乎不可能一个人完成所有的开发工作。
因此,在创建类时需要考虑到其他开发人员也会使用这个类。
并且,并不能保证每个开发者都能正确地给变量赋值。
为了应对这种情况,Java允许预先定义「在实例被创建后自动执行的操作」。
而这个操作就是构造函数。
public class Hero {
String name;
int hp;
...
public Hero() {
thie.hp = 100;
}
}
这个类添加了一个名为Hero()的方法。
因此,这个类在被实例化后会自动执行该方法。
另外,构造函数是无法由我们开发者直接调用的。
但以下情况可以调用。
-
- オーバーロードしたコンストラクタから、別のコンストラクタを呼び出せる( this(); )
-
- 継承した場合は子のコンストラクタ内で、親のコンストラクタを呼び出せる( super(); )
特に継承した場合、子クラスのコンストラクタで super(); をつけないと、親クラスの初期化が行われずに問題になることがある。必要に応じて super(); を呼ぶこと。
这是在实例创建时由JVM调用的。
JVM:Java虚拟机。用于执行Java程序的软件。
构造函数的定义方式
被视为构造函数的条件。
-
- 方法名称与类名完全相等
- 方法声明中未写明返回值(不能是void)
public class クラス名 {
クラス名() {
自動的に実行する処理
}
}
如果只是要把固定值如100赋值给字段变量的话,只需使用字段声明 int hp = 100; 就可以了。
当有复杂条件时,建议使用构造函数。
什么是复杂的条件?
在构造函数中接受参数作为附加信息。
public class Hero {
String name;
int hp;
...
public Hero(String name) {
thie.hp = 100;
this.name = name;
}
}
在创建新对象时,还可以指定名称的初始值。
以下是传递参数给 new 的写法。
public class Main {
public static void main(String[] args) {
Hero h1 = new Hero("ハナコ");
...
}
}
由于过载,可以有多个定义。
※ 方法重载:指的是在同一个类中定义多个同名方法,但参数不同。
public class Hero {
String name;
int hp;
...
public Hero(String name) {
thie.hp = 100;
this.name = name;
}
// 今回追加したコンストラクタ
public Hero() {
thie.hp = 100;
this.name = "テスト";
}
}
要使用重载了构造函数的类,请参考以下内容。
public class Main {
public static void main(String[] args) {
Hero h1 = new Hero("ハナコ"); // h1.nameはハナコ
Hero h2 = new Hero(); // h2.nameはテスト
...
}
}
隐式构造函数
每个类都必须具有一个或多个构造函数定义。
只有当类没有任何构造函数定义时,编译器才会自动定义一个无参数且没有处理内容的默认构造函数。
public class Map {
...
public Map() {
}
}
用普通的方式写下来是这样的:
public class Map {
...
}
这可以。