ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
コンストラクタとは
コンストラクタはクラスのインスタンスを生成する new 演算子の直後に呼び出される特殊なメソッドです。クラス名と同じ名前を持ち、戻り値型を書かないのが特徴です。フィールドの初期化や、生成時にしか実行できない不変条件のチェックを担います。
public class User {
private final String name;
private final int age;
// コンストラクタ(クラス名と同じ・戻り値なし)
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
// 利用側
User u = new User("Taro", 30);
デフォルトコンストラクタ
コンストラクタを一つも定義しないクラスには、コンパイラが引数なし・本体空のデフォルトコンストラクタを自動で挿入します。逆に何か一つでも定義すると、デフォルトは生成されません。
// 何も書かないクラス
public class Empty {
// コンパイラが以下を挿入する
// public Empty() {}
}
// 引数ありを書いた瞬間、引数なしは消える
public class User {
public User(String name) { /* ... */ }
}
new User(); // ❌ コンパイルエラー(引数なしコンストラクタなし)
new User("Taro"); // ✅ OK
コンストラクタのオーバーロード
同じクラス内に引数の型または数が異なるコンストラクタを複数定義できます。これをオーバーロードと呼びます。共通処理は this(...) で別コンストラクタに委譲するのが定石です。
public class User {
private final String name;
private final int age;
private final String email;
// 全引数コンストラクタ
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// email を省略 → this(...) で全引数版に委譲
public User(String name, int age) {
this(name, age, "");
}
// 名前だけ
public User(String name) {
this(name, 0, "");
}
}
super(...) と継承
子クラスのコンストラクタは、本体先頭で必ず親のコンストラクタを呼びます。明示的に super(...) を書かないと、コンパイラが暗黙的に super() (引数なし) を挿入します。親に引数なしコンストラクタが無い場合は明示的に書く必要があります。
public class Animal {
private final String name;
public Animal(String name) { this.name = name; }
}
public class Dog extends Animal {
private final String breed;
public Dog(String name, String breed) {
super(name); // ← 必須(Animal に引数なしコンストラクタが無いため)
this.breed = breed;
}
}
final フィールドの初期化
final 修飾されたフィールドはコンストラクタ終了時までに 1 度だけ代入する必要があります。これによりスレッドセーフな不変オブジェクト (immutable) が作れます。
public final class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
// ここで x, y は二度と変更できない
}
public int getX() { return x; }
public int getY() { return y; }
}
private コンストラクタ(Singleton / ユーティリティ)
コンストラクタを private にすると、クラス外部から new できなくなります。Singleton パターンやユーティリティクラスでよく使われます。
// Singleton
public class Config {
private static final Config INSTANCE = new Config();
private Config() {} // 外部から生成不可
public static Config getInstance() { return INSTANCE; }
}
// ユーティリティクラス(static メソッドのみ)
public final class StringUtils {
private StringUtils() {
throw new AssertionError("インスタンス化禁止");
}
public static boolean isEmpty(String s) { return s == null || s.isEmpty(); }
}
Java 14+ record の自動コンストラクタ
Java 14 で正式導入された record は、宣言したフィールドに対応する正準コンストラクタと getter、equals/hashCode/toString を自動生成します。バリデーションを足したい場合はコンパクトコンストラクタを書きます。
// これだけで User(String, int) と name(), age(), equals, hashCode, toString が生える
public record User(String name, int age) {
// コンパクトコンストラクタ(引数リスト省略)
public User {
if (age < 0) throw new IllegalArgumentException("age >= 0");
if (name == null || name.isBlank()) throw new IllegalArgumentException("name required");
}
}
User u = new User("Taro", 30);
u.name(); // "Taro"
u.age(); // 30
修飾子とアクセス制御の比較
| 修飾子 | 外部からの new | 同パッケージ | 子クラス内 super(...) |
|---|---|---|---|
public | 可 | 可 | 可 |
protected | 不可 | 可 | 可 |
| (なし / package-private) | 不可 | 可 | 同パッケージのみ |
private | 不可 | 不可 | 不可(継承不可) |
よくある落とし穴
- 戻り値型を書いてしまう:
public void User() {...}はコンストラクタではなく単なるメソッド。new 時に呼ばれない - this(...) と super(...) を同時に書く: コンパイルエラー。どちらか一方かつ先頭行のみ
- コンストラクタ内でオーバーライド可能メソッドを呼ぶ: 子クラスの未初期化フィールドを触る恐れあり
- final フィールド未初期化: コンストラクタ全パスで代入が必要
FAQ
Q: コンストラクタから例外を投げてもいい?
A: 問題ありません。バリデーションで IllegalArgumentException を投げるのは定石。ただしリソース確保後に投げると finalize が走らないので、try/catch で確実にクローズを。
Q: 親クラスのコンストラクタを 2 つ以上呼びたい
A: 不可。super(...) は 1 度しか呼べません。設計を見直してファクトリメソッドに分けるのが定石。
Q: Lombok の @AllArgsConstructor とは?
A: 全フィールドを引数に取るコンストラクタを自動生成するアノテーション。@NoArgsConstructor / @RequiredArgsConstructor も併用可能。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?