Javaでパラメータ化コンストラクタを作成する方法【サンプルコード付き】
コンストラクタはメソッドに似た仕組みで、クラスのオブジェクトが生成される瞬間に自動的に呼び出されます。主な役割はクラスのインスタンス変数を初期化することで、コンストラクタはクラスと同じ名前を持ち、戻り値の型を持ちません。
Javaのコンストラクタには大きく分けて2種類あります。引数を受け取らない「no-argコンストラクタ」と、本記事で解説する引数を受け取る「パラメータ化コンストラクタ」です。
パラメータ化コンストラクタとは
パラメータ化コンストラクタとは、引数(パラメータ)を受け取り、その値でインスタンス変数を初期化できるコンストラクタです。クラスをインスタンス化するタイミングで異なる値を渡せるため、オブジェクトごとに柔軟な初期化が可能になります。
また、引数の数や型が異なる複数のコンストラクタを1つのクラスに定義することもできます。これをコンストラクタのオーバーロードと呼びます。
サンプルコード
次の例では、StudentDataクラスに4種類のコンストラクタを定義しています。ユーザーから入力された名前と年齢を、それぞれ異なるコンストラクタに渡して動作を確認します。
import java.util.Scanner;
public class StudentData {
private String name;
private int age;
public StudentData(String name, int age){
this.name = name;
this.age = age;
}
public StudentData(){
this(null, 0);
}
public StudentData(String name) {
this(name, 0);
}
public StudentData(int age) {
this(null, age);
}
public void display(){
System.out.println("学生の名前: " + this.name);
System.out.println("学生の年齢: " + this.age);
}
public static void main(String args[]) {
// ユーザーから値を入力してもらう
Scanner sc = new Scanner(System.in);
System.out.println("学生の名前を入力してください:");
String name = sc.nextLine();
System.out.println("学生の年齢を入力してください:");
int age = sc.nextInt();
System.out.println(" ");
// 名前と年齢の両方を受け取るコンストラクタを呼び出す
System.out.println("名前と年齢の両方を受け取るコンストラクタの表示結果:");
new StudentData(name, age).display();
System.out.println(" ");
// 名前のみを受け取るコンストラクタを呼び出す
System.out.println("名前のみを受け取るコンストラクタの表示結果:");
new StudentData(name).display();
System.out.println(" ");
// 年齢のみを受け取るコンストラクタを呼び出す
System.out.println("年齢のみを受け取るコンストラクタの表示結果:");
new StudentData(age).display();
System.out.println(" ");
// 引数なしコンストラクタを呼び出す
System.out.println("引数なしコンストラクタの表示結果:");
new StudentData().display();
}
}実行結果
学生の名前を入力してください: Krishna 学生の年齢を入力してください: 22 名前と年齢の両方を受け取るコンストラクタの表示結果: 学生の名前: Krishna 学生の年齢: 22 名前のみを受け取るコンストラクタの表示結果: 学生の名前: Krishna 学生の年齢: 0 年齢のみを受け取るコンストラクタの表示結果: 学生の名前: null 学生の年齢: 22 引数なしコンストラクタの表示結果: 学生の名前: null 学生の年齢: 0
ポイント解説
- コンストラクタのオーバーロード:引数の組み合わせ(両方・名前のみ・年齢のみ・なし)ごとに異なるコンストラクタを定義することで、さまざまな初期化パターンに柔軟に対応できます。
- this()による別コンストラクタの呼び出し:this(引数) と書くと、同じクラス内の別のコンストラクタを呼び出せます。共通の初期化処理を1か所にまとめられるため、コードの重複を防げます。
- 未指定時のデフォルト値:引数が渡されなかった変数には、String型ならnull、int型なら0が設定されます。実行結果でも、名前だけを渡した場合に年齢が0になっているのが分かります。
-
Java 9のProcessBuilderを使ってプロセスを作成・管理する方法
Java 9では、Process APIが強化され、新たにProcessHandleインターフェースが追加されました。ProcessHandleのインスタンスはローカルプロセスを識別し、プロセスの状態(ステータス)の照会やプロセス管理を可能にします。従来はローカルプロセスのPIDを取得するためにネイティブコードが必要でしたが、ProcessHandle.Infoを使えば、その必要なくPIDやその他のプロセス情報を簡単に取得できるようになりました。 ProcessBuilderクラスは、オペレーティングシステム上で独立したプロセスを作成するために使用されるクラスです。以下の例では、Process
-
Java 9でHTML5準拠のJavadocドキュメントを生成する方法
Java 9より前のバージョンでは、特定のパッケージ、クラス、インターフェース、メソッドに関する情報を調べるには、Googleなどの検索エンジンを使って探す必要がありました。しかしJava 9からは、Javadoc自体に検索機能が組み込まれ、生成されるAPIドキュメントの出力もHTML5標準に準拠するようになりました。 この記事では、実際にサンプルを作成しながら、Java 9でHTML5準拠のJavadocを生成する手順を解説します。 サンプルファイルの作成 まず、「C:/JAVA」フォルダ内に「JavaDocTest.java」というファイルを作成します。コードには、Javadocコメントと