LoginSignup
0
0

Java コンストラクタ

Posted at

フィールドの初期値

型名 フィールドの初期値
int型, short型, log型などの数値の型 0
char型(文字) ¥u00000
boolean型 false
int[]などの配列型 null
String型などのクラス型 null

¥は半角です(全角にしかならなかったです:cry:)

コンストラクタ

クラスからオブジェクトを作成した際に、自動的に実行されるメソッド

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
コンストラクタと見なされる条件

①メソッド名がクラス名と完全に等しい
②メソッド宣言に戻り値の型が記述されていない(void)もだめ

コンストラクタの定義

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0