Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのパラメータ化コンストラクタとは?基本から実例までわかりやすく解説

コンストラクタ(constructor)は、クラスのオブジェクトを生成するタイミングで自動的に呼び出される特殊なメソッドのようなものです。主な役割は、クラスのインスタンス変数を初期化することにあります。コンストラクタには以下のような特徴があります。

  • クラス名と同じ名前を持つ
  • 戻り値の型を持たない(voidも指定しない)
  • オブジェクト生成時に自動的に実行される

パラメータ化コンストラクタとは

パラメータ化コンストラクタ(引数付きコンストラクタ)は、引数を受け取ることができるコンストラクタです。受け取った引数を使ってインスタンス変数を初期化できるため、オブジェクトを生成する瞬間に、それぞれ異なる値を動的に設定することが可能になります。

これにより、同じクラスから生成する複数のオブジェクトに対して、個別の初期値を柔軟に与えられるというメリットがあります。

構文

public class Sample {
    int i;
    public Sample(int i) {
        this.i = i;
    }
}

ポイントは、仮引数の i とインスタンス変数の i を区別するために、this キーワードを使用している点です。this.i は現在のオブジェクトのフィールドを指します。

サンプルコード1:文字列を渡す例

public class Test {
    String val;
    Test(String val) {
        this.val = val;
    }
    public static void main(String args[]) {
        Test obj = new Test("test");
        System.out.println(obj.val);
    }
}

実行結果

test

この例では、new Test("test") の時点で文字列 "test" がコンストラクタに渡され、インスタンス変数 val が初期化されます。その後、obj.val を参照すると、初期化された値が出力されます。

サンプルコード2:複数の引数とScannerを使った例

次の例では、int・String・float の3つの異なる型の引数を受け取るパラメータ化コンストラクタを定義し、ユーザーからの入力値でオブジェクトを初期化しています。

import java.util.Scanner;
public class Test {
    int num;
    String data;
    float flt;
    Test(int num, String data, float flt) {
        this.num = num;
        this.data = data;
        this.flt = flt;
    }
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter an integer value: ");
        int num = sc.nextInt();
        System.out.println("Enter a string value: ");
        String data = sc.next();
        System.out.println("Enter a floating point value: ");
        float flt = sc.nextFloat();
        Test obj = new Test(num, data, flt);
        System.out.println(obj.num);
        System.out.println(obj.data);
        System.out.println(obj.flt);
    }
}

実行結果

Enter an integer value:
1024
Enter a string value:
test
Enter a floating point value:
11.2
1024
test
11.2

キーボードから入力した整数値・文字列・浮動小数点数が、そのままコンストラクタ経由で各インスタンス変数に代入され、正しく出力されていることがわかります。

まとめ

  • コンストラクタはオブジェクト生成時に呼び出され、インスタンス変数の初期化に使われる
  • パラメータ化コンストラクタを使うと、オブジェクト生成時に任意の値を渡して初期化できる
  • 引数名とフィールド名が同じ場合は this キーワードで区別する

デフォルトコンストラクタでは固定値しか設定できませんが、パラメータ化コンストラクタを活用すれば、より柔軟で実用的なクラス設計が可能になります。

  1. JavaにおけるFontクラスとFontMetricsクラスの違いとは?

    Javaでテキストを描画する際、FontクラスとFontMetricsクラスはそれぞれ異なる役割を担っています。両者の違いを簡単にまとめると、Fontクラスは画面に表示するフォントを設定し、言語の文字を対応するグリフ(字形)にマッピングするためのものです。一方、FontMetricsクラスはフォントメトリクスオブジェクトを定義し、特定の画面上で特定のフォントをレンダリングする際の情報(文字幅や高さなど)をカプセル化します。 Fontクラスとは Fontクラスは、Fontオブジェクトのインスタンスを作成するために使用されます。このオブジェクトを使うことで、テキストの描画やラベル、テキストフィー

  2. Javaにおける到達不能なcatchブロックとは?原因とコンパイルエラーの仕組みを解説

    到達不能ブロック(Unreachable Block)とはどのような状況でも制御が決して到達しない文のまとまりは、到達不能ブロック(unreachable block)と呼ばれます。Javaでは、このような到達不能なコードはサポートされておらず、コンパイルエラーとなります。特に複数のcatchブロックを記述する場合には注意が必要です。Exceptionクラスを参照するcatchブロックは必ず最後に配置しなければなりません。これは、Exceptionがすべての例外クラスのスーパークラス(親クラス)であるためです。つまり、複数のcatchブロックを並べる際には、具体的な例外クラスから順に、より一般