フィールドの初期値
型名 | フィールドの初期値 |
---|---|
int型, short型, log型などの数値の型 | 0 |
char型(文字) | ¥u00000 |
boolean型 | false |
int[]などの配列型 | null |
String型などのクラス型 | null |
¥は半角です(全角にしかならなかったです)
コンストラクタ
クラスからオブジェクトを作成した際に、自動的に実行されるメソッド
Hero.java
public class Hero{
String name;
int hp;
public void attack(){
}
public Hero() {
this.hp = 100; // hpフィールドを100で初期化
}
}
Main.java
public class Main {
public static void main(String[] args) {
Hero h = new Hero(); // インスタンス生成と同時にコンストラクタによってHPに100が代入される
System.out.println(h.hp);
}
}
attack()などの通常メソッドは呼ばれないと動かないが、Hero()メソッドはこのクラスがnewされた直後に自動的に実行される。
勇者インスタンスを生成しようとすると、うれたばかりの勇者は必ずHPが100になる
結果.
100
コンストラクタの定義
public class クラス名 {
public クラス名() {
自動的に実行する処理
}
}
コンストラクタを引数で受け取る
コンストラクタが毎回異なる追加情報を引数で受け取れるように宣言する
Hero.java
public class Hero{
String name;
int hp;
// 引数として文字列を1つ受け取る
public Hero(String name) {
this.hp = 100;
this.name = name; // 引数の値でnameフィールドを初期化
}
}
引数を伴うインスタンス生成
new クラス名(実引数1, 実引数2, ....)
Main.java
public class Main {
public static void main(String[] args) {
Hero h = new Hero("ミナト");
System.out.println(h.hp);
System.out.println(h.name);
}
}
結果.
100
ミナト
複数のコンストラクタが定義されていた場合
newするときに渡した引数の型、数、順番に一致するコンストラクタ1つだけが動作する
Person.java
public class Person{
String name;
int age;
public Person(String name){
this.name = name;
}
public Person(String name, int age){
this.name = name;
this.age = age;
}
public Person() {
this.name = "ダミー";
}
}
Main.java
public class Main {
public static void main(String[] args) {
Person p1 = new Person("タロウ");
System.out.println("名前は" + p1.name + "です");
Person p2 = new Person("ハナコ", 30);
System.out.println("名前は" + p2.name + "で、年齢は" + p2.age);
Person p3 = new Person();
System.out.println(p3.name);
}
}
結果.
名前はタロウで、年齢は25
名前はnullで、年齢は0
別のコンストラクタの呼び出し
this(引数);
Person.java
public class Person{
String name;
int age;
public Person(String name, int age){ // コンストラクタ①
this.name = name;
this.age = age;
}
public Person(){
this("ハナコ", 30); // コンストラクタ①を呼び出すようにJVMに依頼
}
}
Main.java
public class Main {
public static void main(String[] args) {
Person p1 = new Person("タロウ", 25);
System.out.println("名前は" + p1.name + "で、年齢は" + p1.age);
Person p2 = new Person();
System.out.println("名前は" + p2.name + "で、年齢は" + p2.age);
}
}
結果.
名前はタロウで、年齢は25
名前はハナコで、年齢は30