Java 5、Java 8、Java 11、Java 17の違いを徹底解説

Javaはその進化の過程で多くの重要な新機能や改良を取り入れてきました。その中でも、Java 5、Java 8、Java 11、Java 17は特に重要なバージョンとされています。本記事では、これら4つのバージョンの違いを詳しく解説します。


Java 5 (JDK 1.5, 2004年リリース)

Java 5は「Tiger」というコードネームで知られ、Javaにとって画期的なバージョンです。以下のようなモダンなプログラミング言語の基盤となる機能が初めて導入されました。

  1. ジェネリクス (Generics)
    型安全性を向上させ、キャストの必要性を削減しました。
    例:
   List<String> list = new ArrayList<>();
  1. 拡張for文 (Enhanced for-loop)
    コレクションのループ処理が簡素化されました。 例:
   for (String item : list) {
       System.out.println(item);
   }
  1. オートボクシングとアンボクシング (Autoboxing/Unboxing)
    プリミティブ型とラッパークラス間の自動変換が可能に。 例:
   Integer num = 10; // オートボクシング
   int value = num;  // アンボクシング
  1. 可変長引数 (Varargs)
    引数の数が可変なメソッドが定義可能に。 例:
   public void print(String... messages) {
       for (String msg : messages) {
           System.out.println(msg);
       }
   }
  1. 列挙型 (Enums)
    定数のグループ化が可能に。 例:
   public enum Day { MONDAY, TUESDAY, WEDNESDAY }
  1. 並列処理用ユーティリティ
    java.util.concurrent パッケージが導入され、高効率な並列処理をサポート。

Java 8 (2014年リリース)

Java 8は関数型プログラミングを中心に、Java開発の方法を大きく変えた革命的なバージョンです。

  1. ラムダ式 (Lambda Expressions)
    コードを簡潔に記述可能。 例:
   list.forEach(item -> System.out.println(item));
  1. Stream API
    コレクションの操作(フィルタリング、ソート、集計など)を宣言的に記述。 例:
   list.stream()
       .filter(s -> s.startsWith("A"))
       .forEach(System.out::println);
  1. デフォルトメソッド (Default Methods)
    インターフェースに実装付きのメソッドを追加可能。 例:
   interface Vehicle {
       default void start() {
           System.out.println("Starting...");
       }
   }
  1. 新しい日時API (java.time)
    直感的かつスレッドセーフな日時操作が可能。 例:
   LocalDate date = LocalDate.now();
  1. Optionalクラス
    nullによるエラーを減らすためのクラス。 例:
   Optional<String> optional = Optional.ofNullable(value);

Java 11 (2018年リリース, LTSバージョン)

Java 11は長期サポート(LTS)バージョンとして、言語機能や開発ツールの現代化に重点を置いています。

  1. ローカル変数の型推論 (Local-Variable Type Inference)
    varを使ったローカル変数の宣言が可能。 例:
   var list = List.of("A", "B", "C");
  1. 新しい文字列操作メソッド
    String クラスに便利なメソッドが追加。 例:
   " ".isBlank();        // true
   "hello\nworld".lines(); // 各行をストリームとして処理
   " test ".strip();     // 両端の空白を削除
  1. HTTPクライアントAPI
    モダンなHTTPクライアントを提供。 例:
   HttpClient client = HttpClient.newHttpClient();
   HttpRequest request = HttpRequest.newBuilder()
       .uri(URI.create("https://example.com"))
       .build();
  1. 実行時の改善
    単一ファイルを直接実行可能。 例:
   java HelloWorld.java
  1. 非推奨機能の削除
    Java EECORBAモジュールなど、古い機能が削除。

Java 17 (2021年リリース, LTSバージョン)

Java 17は最新のLTSバージョンで、さらなる言語強化と性能向上が行われました。

  1. シールドクラス (Sealed Classes)
    継承を制限するクラス。 例:
   public sealed class Shape permits Circle, Square {}
  1. パターンマッチング (Pattern Matching)
    型チェックと変換を簡素化。 例:
   if (obj instanceof String s) {
       System.out.println(s.toUpperCase());
   }
  1. テキストブロック (Text Blocks, Java 15以降)
    複数行の文字列を簡単に表現。 例:
   String text = """
       This is a text block
       spanning multiple lines.
       """;
  1. スイッチ式 (Switch Expressions)
    switch文をより表現力豊かに。 例:
   int result = switch (day) {
       case MONDAY, FRIDAY -> 6;
       case TUESDAY -> 7;
       default -> 0;
   };
  1. 性能と安全性の向上
    ガベージコレクター(G1、ZGC)の性能が大幅改善。

  2. 非推奨および削除
    RMIアクティベーションシステムが削除され、SecurityManagerが非推奨。


まとめ

機能 Java 5 Java 8 Java 11 Java 17
ジェネリクス
ラムダ式
Stream API
日時API
HTTPクライアント
パターンマッチング
シールドクラス

Java 5は基本的な構文と機能を拡張し、Java 8はコーディングの方法を根本的に変えました。Java 11はモダンな開発ツールを提供し、Java 17は現時点での安定したプラットフォームとして、長期利用や運用に適しています。