Javaのコンストラクタとは?newしたときに初期値をセットする仕組み

本記事は、Schooの「Java入門 初級【2026年版】」第5回「クラスとオブジェクト」を学ぶ前後に、Javaのコンストラクタの役割を整理したい方向けのステップアップ学習記事です。
ただし、Schooを受講していない方でも、クラスとオブジェクトを学び始めた段階で読み進められる内容にしています。
Schoo コースページ:Java入門 初級【2026年版】
コンストラクタは、new でオブジェクトを作るときに呼び出される特別な処理です。フィールドに最初の値を入れて、オブジェクトを使い始められる状態にする役割があります。
newしたときにコンストラクタが呼ばれる
前回の記事では、Student クラスを使って、名前と点数を1人分のデータとしてまとめる考え方を確認しました。次のコードでは、new Student("山田", 80) と書いたときに、Student クラスのコンストラクタが呼ばれます。
ファイル名: ConstructorBasicExample.java
public class ConstructorBasicExample {
public static void main(String[] args) {
Student student = new Student("山田", 80);
System.out.println(student.name + "さん:" + student.score + "点");
}
}
class Student {
String name;
int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
}
new Student("山田", 80) の "山田" と 80 は、コンストラクタの引数に渡されます。そして、this.name = name; と this.score = score; によって、オブジェクトのフィールドに値が入ります。
thisは作成中のオブジェクトを表す
コンストラクタの中に出てくる this は、いま作っているオブジェクト自身を表します。this.name はオブジェクトが持つフィールド、右側の name はコンストラクタの引数です。
Student(String name, int score) {
this.name = name;
this.score = score;
}
名前が同じなので少し読みにくく見えますが、左側は「フィールド」、右側は「渡されてきた値」と考えると整理しやすくなります。
実際のクラスの中で見る:フィールドとコンストラクタの対応
this.name は String name; フィールドへ、this.score は int score; フィールドへ値を入れています。
new Student("山田", 80) で渡した値は、コンストラクタの引数で一度受け取られます。そのあと、this.name = name; や this.score = score; によって、フィールドという保存場所へ入ります。
フィールドをクラス宣言の直後に書くのは、クラスが持つ保存場所を先に示すための整理です。値が入る理由は書く順番ではなく、コンストラクタの中で this.name = name; のように代入しているからです。
作り方によって初期値を変えられる
コンストラクタは1つだけとは限りません。引数の数や型が違えば、複数のコンストラクタを用意できます。次の例では、同じ StudentMulti でも、作り方によって初期値が変わります。
ファイル名: StudentMultiExample.java
public class StudentMultiExample {
public static void main(String[] args) {
StudentMulti s1 = new StudentMulti();
StudentMulti s2 = new StudentMulti("山田");
StudentMulti s3 = new StudentMulti("佐藤", 90);
System.out.println(s1.name + ":" + s1.score + "点");
System.out.println(s2.name + ":" + s2.score + "点");
System.out.println(s3.name + ":" + s3.score + "点");
}
}
class StudentMulti {
String name;
int score;
StudentMulti() {
this.name = "未設定";
this.score = 0;
}
StudentMulti(String name) {
this.name = name;
this.score = 0;
}
StudentMulti(String name, int score) {
this.name = name;
this.score = score;
}
}
このように、コンストラクタを複数用意しておくと、「何も指定しない」「名前だけ指定する」「名前と点数を指定する」といった作り方を選べます。
どのコンストラクタが呼ばれるかを確認する
下のツールで、new の書き方を切り替えてみましょう。書き方によって、呼ばれるコンストラクタとフィールドに入る初期値が変わります。
new の書き方と呼ばれるコンストラクタ
1. 書いたコード
2. 呼ばれるコンストラクタ
作られたオブジェクトの中身
StudentMulti オブジェクト
コンストラクタで初期値を決める理由
コンストラクタを使うと、オブジェクトを作った直後から必要な値が入った状態にできます。名前が必要なクラスなら名前を入れて作る、点数が未入力なら 0 にしておく、というように、最初の状態をクラス側で決められます。
初期値が決まっていないオブジェクトが増えると、あとから「この値は入っているのか」を確認する必要が出てきます。コンストラクタで最初の状態をそろえておくと、コードを読む側も扱いやすくなります。
確認問題
new Student("山田", 80)と書いたとき、"山田"と80はどこへ渡されますか。this.name = name;の左側と右側は、それぞれ何を表していますか。StudentMulti()、StudentMulti(String name)、StudentMulti(String name, int score)のように複数のコンストラクタを用意する利点を説明してください。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
あわせて読みたい関連記事
まとめ
コンストラクタは、new でオブジェクトを作るときに呼ばれ、フィールドに初期値をセットするための仕組みです。引数の違うコンストラクタを用意すると、作り方に応じて最初の状態を変えられます。