3.

Java 文法の基礎完全ガイド — class / 変数 / 制御 / OOP / Generics / Lambda / record

編集
この記事の要点
  • Java の最小単位は class。実行は public static void main(String[] args) から始まる
  • 変数は primitive (int, long, double, boolean, char ほか) と reference (オブジェクト) の 2 種類
  • OOP の核は class / instance / extends / implements。多重継承は不可、複数 interface は可
  • アクセス修飾子: public / protected / package-private / private。final は再代入禁止、static はクラス共有
  • Java 8 以降は Lambda・Stream API、Java 14+ は record、Java 17+ は sealed class / switch 式 が定番

Java の最小プログラム

Java はすべてが class に属し、エントリーポイントは public static void main(String[] args) です。

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}
// javac Hello.java   → Hello.class
// java Hello         → Hello, Java!

Java 11 以降は java Hello.javaコンパイル不要の単一ファイル実行もできます。

変数とデータ型

Java の変数は プリミティブ型参照型 に大別されます。

分類サイズ
整数byte8bit-128 〜 127
short16bit±32,767
int32bit±21 億
long64bit末尾 L: 1_000L
浮動小数float32bit末尾 F: 3.14F
double64bit標準
論理boolean1bittrue / false
文字char16bitUTF-16 1 符号単位
参照型String など4 or 8byteヒープへの参照
int    age   = 30;
long   pop   = 7_900_000_000L;   // アンダースコア区切り
double pi    = 3.14159;
char   ch    = 'A';
boolean flag = true;

// var (Java 10+) - 型推論
var name = "Taro";   // String 扱い
var list = new java.util.ArrayList();

制御フロー

// if / else
if (score >= 80) {
    grade = "A";
} else if (score >= 60) {
    grade = "B";
} else {
    grade = "C";
}

// switch (Java 14+ 式)
String season = switch (month) {
    case 12, 1, 2  -> "冬";
    case 3, 4, 5   -> "春";
    case 6, 7, 8   -> "夏";
    case 9, 10, 11 -> "秋";
    default        -> throw new IllegalArgumentException();
};

// for / 拡張 for / while
for (int i = 0; i < 10; i++) { ... }
for (String s : list) { ... }
while (cond) { ... }
do { ... } while (cond);

配列とコレクション

// 配列
int[] arr = new int[5];
int[] nums = {1, 2, 3, 4, 5};
System.out.println(nums.length);  // 5
System.out.println(nums[0]);      // 1

// 多次元配列
int[][] mat = {{1, 2}, {3, 4}};

// コレクション (java.util)
List list = new ArrayList<>();
Map map = new HashMap<>();
Set set = new HashSet<>();

list.add("a"); list.add("b");
map.put("apple", 100);

// List.of (Java 9+) は不変
List immutable = List.of(1, 2, 3);

クラスとインスタンス

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 void setName(String name) { this.name = name; }

    @Override
    public String toString() {
        return "User{name=" + name + ", age=" + age + "}";
    }
}

// 利用
User u = new User("Taro", 30);
System.out.println(u.getName());

継承 (extends) と インターフェース (implements)

// 抽象クラス
abstract class Animal {
    protected String name;
    public Animal(String name) { this.name = name; }
    public abstract String cry();
}

// 継承
class Dog extends Animal {
    public Dog(String name) { super(name); }
    @Override public String cry() { return "わん"; }
}

// インターフェース
interface Runnable {
    void run();
    default void warmup() { System.out.println("準備運動"); }  // Java 8+
}

// 複数 implements 可
class Athlete extends Animal implements Runnable {
    public Athlete(String name) { super(name); }
    @Override public String cry()  { return "がんばる"; }
    @Override public void run()    { System.out.println("走る"); }
}

アクセス修飾子と final / static

修飾子クラス内同パッケージサブクラスその他
public
protected×
(none)××
private×××
public class Constants {
    public static final double PI = 3.14159;     // 定数
    public static int counter = 0;                // クラス共有変数

    private final String id;                      // 一度だけ代入可能
    public Constants(String id) { this.id = id; }
}

Generics (ジェネリクス)

// 型パラメータ
class Box {
    private T value;
    public void set(T v) { value = v; }
    public T get() { return value; }
}

Box  s = new Box<>();
Box i = new Box<>();

// 境界
class NumberBox {
    public double doubleValue(T t) { return t.doubleValue(); }
}

// ワイルドカード
List nums;   // Number またはそのサブクラス(読み取り専用)
List  ints;   // Integer またはそのスーパー(書き込み可)

例外処理 (try-catch-finally)

try {
    int n = Integer.parseInt(s);
    Files.readAllLines(Path.of("data.txt"));
} catch (NumberFormatException e) {
    System.err.println("数値変換失敗: " + e.getMessage());
} catch (IOException e) {
    System.err.println("ファイル読み込み失敗: " + e.getMessage());
} finally {
    System.out.println("必ず実行");
}

// try-with-resources (Java 7+) - AutoCloseable を自動 close
try (BufferedReader br = Files.newBufferedReader(Path.of("a.txt"))) {
    String line = br.readLine();
}

Lambda と Stream (Java 8+)

// Lambda
Runnable r = () -> System.out.println("hi");
Comparator cmp = (a, b) -> a.length() - b.length();

// Stream API
List nums = List.of(1, 2, 3, 4, 5);
int sum = nums.stream()
    .filter(n -> n % 2 == 0)
    .mapToInt(Integer::intValue)
    .sum();   // 2 + 4 = 6

// メソッド参照
list.forEach(System.out::println);
list.stream().map(String::toUpperCase).toList();

record (Java 14+) と sealed class (Java 17+)

// record - 不変データクラス (boilerplate ゼロ)
public record Point(int x, int y) {}

Point p = new Point(3, 4);
System.out.println(p.x());     // 3
System.out.println(p);          // Point[x=3, y=4]
// equals / hashCode / toString 自動生成

// sealed - 継承できるクラスを制限
sealed interface Shape permits Circle, Square, Triangle {}
record Circle(double r) implements Shape {}
record Square(double s) implements Shape {}
record Triangle(double a, double b, double c) implements Shape {}

FAQ

Q: int と Integer の違いは?
A: int はプリミティブ、Integer はラッパー (参照型)。コレクションには Integer しか入りません。autoboxing で自動変換されます。

Q: == と equals() の使い分け
A: 参照型は equals() で値比較。== は参照同一性。文字列は "a".equals(s) のように定数を左に置くと NullPointerException を防げます。

Q: どの Java バージョンを使うべき?
A: 2026 年時点では Java 21 LTS が標準。レガシー保守でも Java 17 LTS まで上げるのが望ましいです。

編集
Post Share
子ページ
  1. 基本的なルール
  2. データ型
  3. 変数
  4. 定数
  5. 配列
  6. コレクション(List,Set,Queue)
  7. Map(連想配列)
  8. 演算子
  9. 条件分岐
  10. 繰り返し制御文
  11. クラス
  12. メソッド
  13. インスタンス化
  14. コンストラクタ
  15. staticキーワード
  16. オーバーロード
  17. 継承
  18. オーバーライド
  19. this
  20. super
  21. パッケージ
  22. アクセス修飾子
  23. 抽象クラス・メソッド
  24. インターフェース
  25. カプセル化
  26. データベース接続
  27. セッション
  28. ファイル入出力
  29. ラムダ式
同階層のページ
  1. プラットホーム
  2. 環境構築
  3. 文法
  4. API
  5. Servlet(サーブレット)
  6. JSP
  7. Applet(アプレット)
  8. デザインパターン
  9. フレームワーク
  10. ライブラリ
  11. Androidアプリケーション
  12. Project Jigsaw
  13. エラー一覧
  14. 日付の加算、減算
  15. 文字列の数字チェック
  16. 改行コードの削除
  17. 先頭と末端の文字の削除
  18. warファイルの中身を確認する方法
  19. nullもしくは空文字の判定
  20. beanの中身を確認する方法
  21. org.apache.log4j.Logger のログ出力で printStackTrace() のエラー内容を出力する方法
  22. Javaのバージョン確認方法