Knowledge Log

【Java】newした瞬間に初期化!「コンストラクタ」でコードを激減させるテクニック

denson
1

はじめに

みなさんどうも、おげんです。

クラスを作って、new でインスタンス化する…。

Javaの基本を学んでいく中で、こんなコードを何度も書いていませんか?

Hero h = new Hero();
h.name = "おげん";
h.hp = 100;

今はまだ数行ですが、もしキャラクターのパラメータが20個あったら?

もし100人の村人を作るとしたら?

毎回 new した後にせっせと1行ずつ値を代入するのは、正直言ってめちゃくちゃ面倒くさいですよね。

しかも、「HPをセットし忘れて、いきなりHP0で冒険が始まった!」なんてバグも起きかねません。

そんな「初期設定の悩み」をたった1行で、しかも確実に解決してくれるのが、今回ご紹介する「コンストラクタ(Constructor)」です。

これを使えば、インスタンスが生まれた瞬間に、自動で名前やステータスをセットできるようになります。

「手動」から「全自動」へ。

クラスの扱いをワンランク上のレベルに引き上げていきましょう!

この記事はこんな人におすすめ!
  • new した後の「代入ラッシュ」をスッキリまとめたい人
  • インスタンスを作るときに、値の入れ忘れを防ぎたい人
  • 「クラス名と同じ名前のメソッドみたいなやつ」の正体を知りたい人
2

コンストラクタは「キャラ作成画面」である

プログラムの世界で new をしてインスタンスを作ることは、新しい命を誕生させるようなものです。

でも、生まれた瞬間に「名前がない」「HPが設定されていない」というのは、RPGでいえばステータスが真っ白なままフィールドに放り出されるようなもの。

これでは困りますよね。

そこで登場するのが コンストラクタ です。

「生まれた瞬間」に決める

RPGを始めるとき、まず最初に「名前は?」「職業は?」と聞かれる画面が出てきますよね。

あれこそがコンストラクタの役割です。

  • これまでのやり方: 赤ちゃんを誕生させた後、後付けで名前をつけたり服を着せたりする(手動)。
  • コンストラクタ: 名前や装備が決まった状態で、パッと誕生させる(全自動)。

コンストラクタの2大メリット

  1. 書き忘れを防ぐ(安全): 「名前を入れないと冒険に出られない(インスタンスを作れない)」というルールを作れるので、バグが減ります。
  2. コードがスッキリ(効率): 何行も書いていた初期設定が、new の瞬間のたった1行で終わります。

コンストラクタは、いわば「インスタンス専用の出生届」

これがあるおかげで、私たちは安心して新しいキャラクターを次々と生み出せるようになるんです。

3

コンストラクタの書き方ルール

コンストラクタは、一見すると「メソッド」にそっくりですが、「2つの特別なルール」があります。

コンストラクタの鉄則

  1. 名前は「クラス名」と全く同じにする
  2. 「戻り値(voidなど)」は書かない

実際のコードで、Heroクラスにコンストラクタを実装してみましょう。

public class Hero {
    String name;
    int hp;

    // これがコンストラクタ!
    public Hero(String name, int hp) {
        this.name = name; // もらった名前をセット
        this.hp = hp;     // もらったHPをセット
    }
}

呼び出し方は new の後ろ!

今までは new Hero() と書いていましたが、コンストラクタを作ると、インスタンス化するときに値を渡せるようになります。

// インスタンス化と同時に初期設定が完了!
Hero h = new Hero("おげん", 100);

System.out.println(h.name + "が誕生した!"); 
// 出力:おげんが誕生した!

「this」って何?

コードの中に出てきた this.name = name; という書き方。

これは、「このクラスの変数(フィールド)」と「引数でもらった値」を区別するための合言葉です。

「この(this)クラスのnameに、引数のnameを入れてね!」という意味になります。

4

書かなくても存在?「デフォルトコンストラクタ」

ここで一つ、不思議に思いませんか?

「今までの記事ではコンストラクタを書いてなかったのに、なんで new Hero() で動いていたんだろう?」と。

実はJavaには、「コンストラクタが一つも書かれていない場合、中身が空っぽのコンストラクタを勝手に準備してくれる」というお節介(?)な機能があるんです。

これをデフォルトコンストラクタと呼びます。

「自作」すると「お節介」が消える!

ここが最大の注意点です。

自分で一つでもコンストラクタ(引数ありなど)を書くと、Javaはデフォルトコンストラクタを準備してくれなくなります。

  • コンストラクタを何も書かない時: new Hero()OK!
  • 引数ありを作った時: new Hero()エラー!(引数を入れろと怒られる)

「引数なし」も残しておきたい時は?

「名前を決めて作りたい時もあるけど、とりあえず空っぽで作っておきたい時もあるなぁ」という場合は、両方書けばOKです!

public class Hero {
    String name;
    int hp;

    // パターンA:名前を指定して作る出生届
    public Hero(String name, int hp) {
        this.name = name;
        this.hp = hp;
    }

    // パターンB:とりあえず「名無し」で作る出生届
    public Hero() {
        this.name = "名無し";
        this.hp = 10;
    }
}

このように、同じ名前で「引数のパターン」が違うコンストラクタを複数作ることを、専門用語でオーバーロードと呼びます。

5

まとめ:コンストラクタで「安全」を手に入れよう

今回は、インスタンス生成時の初期設定を自動化する 「コンストラクタ」 について学びました。

最後におさらいしておきましょう。

  1. コンストラクタとは: new した瞬間に自動で実行される「初期化専用のメソッド」。
  2. 書き方のルール: 名前はクラス名と同じ。戻り値(voidなど)は書かない。
  3. 最大のメリット: 「名前がないキャラ」などの不完全なインスタンスが生まれるのを防ぎ、コードもスッキリする!

「自由」よりも「ルール」があなたを助ける

プログラミングを始めたばかりのときは「自由に何でも入れたい」と思うかもしれません。

でも、大きなプログラムになればなるほど、「このデータ(引数)がないと、このインスタンスは作らせない!」という強いルールがあったほうが、ミスが減って開発がラクになります。

コンストラクタを使いこなすことは、プログラムに「秩序」を与えること。

「生まれた瞬間から完璧な状態」を作れるようになれば、あなたのJava力はもう初心者レベルを脱していますよ!

今回も最後まで読んでいただき、ありがとうございました!

ABOUT ME
おげん
おげん
駆け出しエンジニア
文系未経験からエンジニアになるために挑戦を開始したアラサー。転職活動を終え、2026年4月からIT企業で勤務予定。自分が学習で苦労した経験を『誰かのための道しるべ』として発信中。
記事URLをコピーしました