Javaのコンストラクタには何種類ある?引数あり・引数なしの違いを徹底解説
コンストラクタはメソッドに似た仕組みで、クラスのオブジェクトを生成するタイミングで自動的に呼び出されます。主な役割は、クラスのインスタンス変数(フィールド)を初期化することです。
コンストラクタには次のような特徴があります。
- クラス名と同じ名前を持つ
- 戻り値の型を持たない(voidも指定しない)
- オブジェクト生成時にnewキーワードとともに自動的に実行される
Javaのコンストラクタは、大きく分けて「引数あり(パラメータ化された)コンストラクタ」と「引数なしコンストラクタ」の2種類があります。それぞれ詳しく見ていきましょう。
1. 引数あり(パラメータ化された)コンストラクタ
引数ありのコンストラクタは、その名の通りパラメータを受け取ることができ、受け取った値を使ってインスタンス変数を初期化します。
この形式を使うと、オブジェクトを生成する瞬間に、呼び出しごとに異なる値を渡して動的に初期化できるのが大きなメリットです。
サンプルコード
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("整数値を入力してください:");
int num = sc.nextInt();
System.out.println("文字列を入力してください:");
String data = sc.next();
System.out.println("浮動小数点数を入力してください:");
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);
}
}実行結果
整数値を入力してください: 1024 文字列を入力してください: test 浮動小数点数を入力してください: 11.2 1024 test 11.2
この例では、ユーザーから入力した値を引数として渡し、オブジェクト生成時に各フィールドを初期化しています。このように、引数ありのコンストラクタを使えば柔軟な初期化が可能になります。
2. 引数なしコンストラクタ
引数なしのコンストラクタは、パラメータを受け取りません。あらかじめコード内で決められた固定値や、各データ型のデフォルト値(オブジェクト型はnull、float/doubleは0.0、booleanはfalse、byte/short/int/longは0など)を使ってインスタンス変数を初期化します。
サンプルコード
public class Test {
int num;
String data;
float flt;
Test(){
this.num = 100;
this.data = "test";
this.flt = 125.33f;
}
public static void main(String args[]){
Test obj = new Test();
System.out.println(obj.num);
System.out.println(obj.data);
System.out.println(obj.flt);
}
}実行結果
100 test 125.33
この例では、引数を一切渡さずにオブジェクトを生成していますが、コンストラクタ内で設定された固定値によって各フィールドが初期化されていることがわかります。
補足:デフォルトコンストラクタについて
Javaでは、クラス内にコンストラクタを1つも定義しなかった場合、コンパイラが自動的に「デフォルトコンストラクタ」(引数なし・処理内容なし)を提供してくれます。ただし、一度でも引数ありのコンストラクタを定義すると、この自動提供は行われなくなるため注意が必要です。
まとめ
| 種類 | 特徴 | 主な用途 |
|---|---|---|
| 引数ありコンストラクタ | パラメータを受け取り、渡された値で初期化 | オブジェクトごとに異なる値で動的に初期化したい場合 |
| 引数なしコンストラクタ | パラメータを受け取らず、固定値やデフォルト値で初期化 | 共通の初期値でオブジェクトを生成したい場合 |
用途に応じて2種類のコンストラクタを使い分けることで、より安全で読みやすいJavaプログラムを書くことができます。
-
Javaで作成できるJDialogボックスは2種類!モーダルと非モーダルの違いを解説
JDialogはDialogクラスのサブクラスで構されるSwingのダイアログコンポーネントです。一般的なフレームウィンドウと異なり、ウィンドウ右上に最小化・最大化ボタンが表示されません。Javaでは、このJDialogボックスを用途に応じて2種類作成できます。 モーダルダイアログ(Modal Dialog) 非モーダルダイアログ(Non-Modal Dialog) モーダルJDialog(Modal JDialog) Javaにおいて、モーダルダイアログがアクティブになっている間、すべてのユーザー入力はそのダイアログに向けられます。このダイアログを閉じるまで、アプリケーションの他の部分に
-
セキュリティ脆弱性は年間1万8千件超、実際に悪用されるのは約2%――CVEの実態とCVSS評価の仕組み
毎年、セキュリティ企業やテック企業は数千件に及ぶ脆弱性の詳細を公表しています。メディアもそれらの脆弱性を取り上げ、特に危険度の高い問題を強調しながら、ユーザーへの安全対策を伝えています。 しかし、こう考えてみてください。公表される何千もの脆弱性のうち、実際にインターネット上で悪用されているものはごくわずかだということを。 では、セキュリティ脆弱性は全部でいくつあるのでしょうか。そして、セキュリティ企業は脆弱性の危険度をどのように判断しているのでしょうか。 セキュリティ脆弱性は全部でいくつある? Kenna Security(現Cisco)の「Prioritization to Predicti