ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
クラスの基本構文
public class User {
// フィールド (状態)
private String name;
private int age;
// コンストラクタ
public User(String name, int age) {
this.name = name;
this.age = age;
}
// メソッド (振る舞い)
public String getName() { return name; }
public int getAge() { return age; }
public void birthday() {
age++;
}
@Override
public String toString() {
return "User{name=" + name + ", age=" + age + "}";
}
}
// 使う側
User u = new User("Alice", 30);
u.birthday();
System.out.println(u); // User{name=Alice, age=31}
アクセス修飾子
| 修飾子 | 同じクラス | 同じパッケージ | サブクラス | その他 |
|---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
| (無指定 = package-private) | O | O | X | X |
private | O | X | X | X |
カプセル化の基本: フィールドは private、必要なものだけ public な getter/setter で公開します。
static / final / abstract
public class MathUtil {
// static フィールド = クラス共有の値 (定数)
public static final double PI = 3.14159265;
// static メソッド = インスタンス不要で呼べる
public static double square(double x) {
return x * x;
}
}
// インスタンス化せず呼ぶ
double area = MathUtil.PI * MathUtil.square(5);
// abstract = 抽象クラス (インスタンス化できない)
public abstract class Animal {
abstract String sound();
public void introduce() {
System.out.println("I say " + sound());
}
}
// 継承して実装
public class Dog extends Animal {
String sound() { return "Woof"; }
}
// final クラス = 継承不可 (String, Integer 等)
public final class Constants { ... }
コンストラクタとオーバーロード
public class User {
private String name;
private int age;
// デフォルトコンストラクタ (引数なし)
public User() {
this("(Unknown)", 0); // this() で他コンストラクタを呼ぶ
}
public User(String name) {
this(name, 0);
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
// 全て有効
new User();
new User("Alice");
new User("Alice", 30);
内部クラス 4 種
| 種類 | 定義場所 | 外側インスタンス参照 | 用途 |
|---|---|---|---|
| static nested | クラス内 | 不可 | 外側と関連するが独立して使う |
| inner | クラス内 (非 static) | 可 | 外側のフィールド使う補助 |
| local | メソッド内 | 可 | そのメソッド内専用 |
| anonymous | その場で new | 可 | 1 回限りのインターフェース実装 |
public class Outer {
private int x = 10;
// 1. static nested
static class StaticNested {
void hi() { System.out.println("static nested"); }
}
// 2. inner
class Inner {
void hi() { System.out.println("inner, x=" + x); } // 外側 x 参照可
}
void method() {
// 3. local
class Local { void hi() { System.out.println("local"); } }
new Local().hi();
// 4. anonymous
Runnable r = new Runnable() {
public void run() { System.out.println("anon"); }
};
r.run();
// モダン Java は Lambda で代替
Runnable r2 = () -> System.out.println("lambda");
}
}
new Outer.StaticNested().hi(); // static は Outer 不要
new Outer().new Inner().hi(); // inner は Outer インスタンス経由
record (Java 14+)
// 不変データクラスを 1 行で
public record User(String name, int age) {}
// 自動生成されるもの:
// - private final フィールド name, age
// - コンストラクタ User(String, int)
// - アクセサ name(), age()
// - equals / hashCode / toString
User u = new User("Alice", 30);
System.out.println(u.name()); // Alice
System.out.println(u); // User[name=Alice, age=30]
// カスタムロジックを追加
public record User(String name, int age) {
public User { // コンパクトコンストラクタ
if (age < 0) throw new IllegalArgumentException();
}
public String greeting() {
return "Hi, " + name;
}
}
sealed (Java 17+)
// permits で継承可能なクラスを限定
public sealed interface Shape
permits Circle, Square, Triangle {}
public record Circle(double r) implements Shape {}
public record Square(double side) implements Shape {}
public record Triangle(double a, double b, double c) implements Shape {}
// switch パターンマッチング (Java 21+) で網羅性チェック
double area(Shape s) {
return switch (s) {
case Circle c -> Math.PI * c.r() * c.r();
case Square sq -> sq.side() * sq.side();
case Triangle t -> 0.5 * t.a() * t.b();
}; // default 不要、コンパイル時に網羅性検証
}
シングルトンパターン
// 1 つしかインスタンス作らせない
public class Config {
private static final Config INSTANCE = new Config();
private Config() { /* 外部から new 禁止 */ }
public static Config getInstance() { return INSTANCE; }
}
Config c = Config.getInstance();
// ★ enum で書くのが最もシンプル
public enum SingletonEnum {
INSTANCE;
public void doWork() { ... }
}
SingletonEnum.INSTANCE.doWork();
JavaBean 規約
- 引数なしの public コンストラクタを持つ
- フィールドは private、getter / setter で公開
- getter は
getXxx()、setter はsetXxx()。boolean はisXxx() Serializableを実装することが多い
多くのフレームワーク (Spring, JPA, Jackson) が JavaBean 規約を前提に動きます。
コンパイルと実行
# 単一ファイル
javac User.java # User.class が生成
java User # main メソッドを実行
# Java 11+ は javac せずに直接実行可能
java User.java
# パッケージ付き
javac -d build src/com/example/User.java
java -cp build com.example.User
FAQ
Q: クラスと interface の使い分けは?
A: 状態を持つなら class、契約 (メソッド一覧) だけならインターフェース。Java 8+ は default メソッドで実装も持てるが、状態 (フィールド) は依然 class のみ。
Q: record と class どちらを使う?
A: 不変データ転送オブジェクト (DTO) は record。状態を変えたり継承したいなら class。
Q: 1 ファイルに複数 public クラスを書ける?
A: 不可。1 ファイル 1 public クラス、ファイル名はクラス名と一致。非 public なら同居可能。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?