【Java】レッスン5-02:初心者向け|コンストラクタの使い方と実装例を学ぼう

一つ前のページではクラスの基本について学習しました。
今回は コンストラクタ について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド編
Lesson4:コレクション編
Lesson5:クラス編
・Lesson5-1:クラスの基本を確認しよう
・Lesson5-2:コンストラクタを理解しよう ◁今回はココ
・Lesson5-3:カプセル化を理解しよう
・Lesson5-4:クラスメンバとインスタンスメンバを理解しよう
・Lesson5-5:クラスの継承を理解しよう
・Lesson5-6:メソッドのオーバーライドを理解しよう
・Lesson5-7:抽象クラスを理解しよう
・Lesson5-8:インターフェースを理解しよう
・確認問題5-☆1:モンスター捕獲ゲームを作ろう
・確認問題5-☆2:モンスターとのバトルゲームを作ろう
・確認問題5-☆3:マルバツゲーム(Tic-Tac-Toe)を作成しよう
Javaのコンストラクタ入門|役割・構文・使い方をわかりやすく解説

オブジェクト指向プログラミングの重要な概念の一つに「コンストラクタ」があります。
コンストラクタはクラスからインスタンス(オブジェクト)を生成する際に、インスタンスの初期化を行う特別なメソッドです。
今回はコンストラクタの役割や使い方を初心者向けに解説します。
コンストラクタの基本とは?|オブジェクト初期化のしくみ
コンストラクタはクラスと同じ名前を持つ特殊なメソッドで、オブジェクトが生成されるときに一度だけ実行されます。
このメソッドはオブジェクトの初期設定を行い、必要な初期値を設定する役割を果たします。
またコンストラクタは戻り値を持たないため、void
などの戻り値の型を指定しません。これにより通常のメソッドと区別されます。
コンストラクタの基本構文
class クラス名 { // コンストラクタ クラス名(パラメータ) { //クラス名と同名のメソッド // 初期化処理 } }
Javaでのコンストラクタ記述方法とインスタンス生成の流れ
ではコンストラクタを実際に使う例を見てみましょう。例えばユーザーの名前とスコアを持つUser
クラスを作成するとします。
以下のコードではUser
クラスにコンストラクタを定義し、インスタンスの生成時に名前とスコアを設定できるようにしています。
class User { //ユーザークラスの定義 //インスタンス変数(ユーザークラスのフィールド) String name; int score; // コンストラクタ(ユーザー名と同名のメソッド) User(String name, int score) { this.name = name; //このname(インスタンス変数)に引数nameを代入 this.score = score; //このscore(インスタンス変数)に引数scoreを代入 } } // コンストラクタを使用してインスタンスを生成 User user = new User("Alice", 85); //ユーザー型の変数userに、生成したインスタンスを代入
この例ではUser
クラスのコンストラクタがname
とscore
の値を初期化しています。
new User("Alice", 85);
のようにしてインスタンスを作成することで、user
オブジェクトが「Alice」という名前と85というスコアを持つ状態で生成されます。
なぜ必要?|コンストラクタで得られる利点と制御の仕組み
コンストラクタの役割は主にオブジェクトの生成時に適切な初期設定を行うことです。
これにより各インスタンスが必ず必要な初期値を持つようになり、プログラムの予測可能性と安定性が向上します。
例えば、スコアは必ず0点以上になるべきとします。
この場合、コンストラクタ内でスコアを初期化することで、すべてのインスタンスに正しい初期値が設定され、不正な状態を防ぐことができます。
class User { //インスタンス変数 String name; int score; // コンストラクタ(スコアの範囲チェックを追加) User(String name, int score) { this.name = name; if (score < 0) { this.score = 0; // 引数scoreが0以下の場合は0に設定 } else { this.score = score; //このscore(フィールドのscore)に引数scoreを代入 } } }
このように、コンストラクタを利用することでオブジェクトが常に正しい状態で生成されるように制御できます。
本記事のまとめ|Javaコンストラクタの理解を深めるポイント

コンストラクタはクラスからインスタンスを生成する際に初期化処理を行う重要な役割を持っています。
クラスと同じ名前で定義され、戻り値がなく、一度だけ実行されるこのメソッドにより、オブジェクトの設定がスムーズに行えます。
初心者にとっても、コンストラクタの理解はオブジェクト指向プログラミングの基礎を築く上で重要なポイントです。
実際にコードを書きながら、コンストラクタの使い方を試してみましょう。
練習問題|Bookクラスで本のタイトルと著者を管理するプログラムを作成しよう

本の情報を管理するためのプログラムを作成しましょう。
このプログラムでは、本のタイトルと著者を管理し、その情報を表示する機能を持ちます。
この問題の要件
以下の要件に従ってコードを完成させてください。
Book
という名前のクラスを作成してください。Book
クラスには以下のフィールドを持たせてください。String title
: 本のタイトルを表すフィールドString author
: 本の著者を表すフィールド
Book
クラスには以下のコンストラクタを定義してください。- 引数として本のタイトルと著者を受け取り、それをフィールドに設定するコンストラクタ
Book
クラスには本の情報を表示するためのdisplayInfo
メソッドを定義してください。このメソッドは、本のタイトルと著者を表示する機能を持ちます。Main
クラスのmain
メソッド内で、Book
クラスのインスタンスを作成し、そのインスタンスのdisplayInfo
メソッドを呼び出して本の情報を表示してください。
ただし、以下のような実行結果となること。
タイトル: 吾輩は猫である 著者: 夏目漱石
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
1:Bookクラスの定義
□ String型のtitleフィールドを定義
□ String型のauthorフィールドを定義
□ Bookクラスのコンストラクタを定義し、titleとauthorを初期化
□ void型のdisplayInfoメソッドを定義
□ □ 本のタイトルを表示
□ □ 本の著者を表示
2:Mainクラスの定義
□ mainメソッドの定義
□ □ Bookクラスのインスタンスを生成し、タイトルと著者を指定
□ □ displayInfoメソッドを呼び出して本の情報を表示
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
// 本の情報を管理するクラス class Book { // フィールド(本のタイトルと著者) String title; String author; // コンストラクタ /*【穴埋め問題1】 ここにBookクラスのコンストラクタを定義し、引数としてタイトルと著者を受け取り、それらをフィールドに設定するコードを書いてください。 */ // 本の情報を表示するメソッド void displayInfo() { // 本のタイトルと著者を表示 System.out.println("タイトル: " + title); System.out.println("著者: " + author); } } public class Main { public static void main(String[] args) { // Bookクラスのインスタンスを作成(コンストラクタを使用) /*【穴埋め問題2】 ここでBookクラスのインスタンスを作成し、タイトル「吾輩は猫である」と著者「夏目漱石」を指定するコードを書いてください。 */ // 本の情報を表示 book.displayInfo(); } }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
// 本の情報を管理するクラス class Book { // フィールド(本のタイトルと著者) String title; String author; // コンストラクタ Book(String title, String author) { // コンストラクタの引数で受け取った値をフィールドに設定 this.title = title; this.author = author; } // 本の情報を表示するメソッド void displayInfo() { // 本のタイトルと著者を表示 System.out.println("タイトル: " + title); System.out.println("著者: " + author); } } public class Main { public static void main(String[] args) { // Bookクラスのインスタンスを作成(コンストラクタを使用) Book book = new Book("吾輩は猫である", "夏目漱石"); // 本の情報を表示 book.displayInfo(); } }
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
Bookクラスの定義
class Book { String title; String author;
最初に本の情報を管理するための
Book
クラスを定義しています。クラスはオブジェクトの設計図であり、ここでは「タイトル」と「著者」という2つのフィールド(変数)を定義しています。
このフィールドは
Book
クラスの各インスタンス(オブジェクト)が持つ属性となります。コンストラクタの定義
Book(String title, String author) { this.title = title; this.author = author; }
ここでのコンストラクタはこのクラスの最も重要な部分です。
このコンストラクタは本のタイトルと著者を受け取って、クラスのフィールドである
title
とauthor
にその値を設定します。this.title = title;
と書かれたthis
キーワードは、インスタンスのフィールドを指しています。これにより引数として受け取った値が正しく
Book
インスタンスのtitle
やauthor
に代入されます。displayInfoメソッド
void displayInfo() { System.out.println("タイトル: " + title); System.out.println("著者: " + author); }
displayInfo
メソッドは、本の情報を表示するためのメソッドです。System.out.println
を使ってインスタンスが持つtitle
とauthor
を出力します。このメソッドはインスタンスに設定された情報を確認したいときに使います。
Mainクラスとmainメソッド
public class Main { public static void main(String[] args) { Book book = new Book("吾輩は猫である", "夏目漱石"); book.displayInfo(); } }
Main
クラスにはmain
メソッドが含まれています。main
メソッドはJavaプログラムのエントリーポイントであり、プログラムの実行が開始される場所です。ここでは次の処理を行っています:Book
クラスのインスタンスを作成し、コンストラクタによりタイトルと著者を設定します。
例では「吾輩は猫である」と「夏目漱石」を渡して、新しいBook
オブジェクトbook
が作成されます。book.displayInfo()
を呼び出して、Book
インスタンスに設定された情報を表示します。このメソッドの呼び出しにより、コンソールにタイトルと著者が出力されます。
まとめ
このコードでJavaでクラスを定義し、コンストラクタでオブジェクトを初期化する方法を学びました。
コンストラクタの役割はクラスのインスタンス生成時にそのインスタンスの状態を設定することです。
今回のコードを通して、クラスの構造やメソッドの使い方が理解できたと思います。
Javaのクラス設計は、オブジェクト指向プログラミングの基本となるため、これを踏まえ、他のクラスの作成にも挑戦してみましょう。