Java8とは、Java Platform Standard Edition8の略称です。これは「Java」のプラットフォームで広く利用されるJava APIの集合を指します。本記事では、Java8に導入された新機能やJava11との違いなどを、実際のソースコードを使って詳しく解説します。
目次
Java8は、Javaプラットフォーム上で使用されるJava APIの広範な集合体を指します。2014年3月にリリースされた重要なアップデートで、通常サポートは2022年3月で終了しましたが、商用利用のサポートは2030年12月まで延長されています。最新のアップデートは「Version 8 Update 391」で、2023年10月17日にリリースされました(2023年11月時点)。
Oracle社が提供するJava開発ツールのJDK(JavaDeveropmentKit)は、商用利用の場合はライセンス料が必要です。しかしOpenJDKのような無償バージョンもあるため、Java8を無料で使えます。ただし商用利用の場合は、必ずライセンス条件の確認が必要です。
Java8から新たに機能が追加され、「Java」のコードをより簡潔に記述できるようになりました。ここからは、Java8の6つの新機能をそれぞれ解説します。
ラムダ式はJava8から追加された機能で、処理を簡潔な関数として定義できるようにしたものです。ラムダ式を使うメリットは、コードの冗長性が減り処理の記述がシンプルになることや無名関数として柔軟に利用できること、並列処理がしやすくなることがあげられます。これにより、「Java」は関数型言語の特性をより活用できるようになりました。
たとえば、printメソッドを実行する処理をラムダ式で記述すると、以下のようになります。
() -> System.out.println(“ラムダ式”)
一方でラムダ式を使わない場合は、以下のようにRunnableインターフェースを実装するクラスを定義する必要があります。
class Printer implements Runnable {
public void run() {
System.out.println(“通常の記述”);
}
}
Java8には、配列やListなどの要素データを簡潔に理解しやすい形で操作できるストリームAPIが導入されました。
次のJavaソースコードは、整数の配列から偶数の数値だけを抽出して新しい整数の配列に格納しています。
①int[] numbers = {1, 2, 3, 4, 5};
②int[] evenNumbers =
③ Arrays.stream(numbers)
④ .filter(n -> n % 2 == 0)
⑤ .toArray();
①numbersという名前の整数型の配列を宣言し、1から5までの整数値で初期化
②evenNumbersという名前の整数型の配列を宣言します。この配列に後で偶数の数値を格納
③Arraysクラスのstreamメソッドを使用して、numbers配列の要素を逐次処理するためのストリームに変換
④ストリームのfilterメソッドを用いて、ラムダ式(n -> n % 2 == 0)を使って偶数のみを抽出
⑤フィルタリングされた結果を新しい整数型の配列に変換し、evenNumbersに代入
Optionalクラスは、null値に関連する問題を回避し安全な操作を支援するためにJava8で導入されたツールです。
①import java.util.Optional; ②class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } } ③Optional optionalAlice = Optional.of(new Person(""Alice"")); ④Person somePerson = getPersonFromSomewhere(); Optional optionalPerson = Optional.ofNullable(somePerson); ⑤if (optionalPerson.isPresent()) { System.out.println(""Person's name: "" + optionalPerson.get().getName()); } else { System.out.println(""Person not found.""); }
①Optionalクラスを使用するためのインポート文
②Personという名前のクラスを定義
③PersonクラスのインスタンスをOptionalでラップし、optionalAliceという名前の変数に格納(この行では非nullのオブジェクトをラップしています)
④getPersonFromSomewhereメソッドから返されるPersonインスタンスをOptionalでラップ(somePersonがnullである可能性があるため、Optional.ofNullableを使用してoptionalPersonを生成します)
⑤optionalPersonに値が存在するかどうかをチェックするために、isPresentメソッドを使用(値が存在する場合は、getメソッドを使用して値にアクセスし、名前を表示します。値が存在しない場合は、「Person not found.」と表示されます。)
Java8で導入されたLocalDateTimeクラスを使うことで、現在日時の取得や特定日時の生成、日時の比較・加減算などが容易にできるようになりました。
// インポート import java.time.*; public class Main { public static void main(String[] args) { // 現在日時の取得 LocalDateTime now = LocalDateTime.now(); // 特定の日時の生成 // 2023年1月1日9時0分0秒の日時をfuture変数に設定 LocalDateTime future = LocalDateTime.of(2023, 1, 1, 9, 0, 0); // 日時の比較 if (now.isBefore(future)) { System.out.println("現在は未来の日時より前です"); } // 日時の加減算 LocalDateTime nextWeek = now.plusWeeks(1); //1週間後 LocalDateTime lastYear = now.minusYears(1); //1年前 } }
Java8では、インターフェースにdefaultメソッドとstaticメソッドを定義できるようになりました。defaultメソッドは、インターフェースにメソッドの具体的な実装を定義できるようになった機能です。以下のように記述します。
interface MyInterface { default void method() { // メソッドの処理 } static int getNumber() { return 100; } }
これにより、インターフェースに補助的な処理を定義できるようになり、インターフェースの機能が向上しました。既存の実装への影響も少ないため、柔軟な設計ができます。
Java8ではアノテーションの機能が拡張され、より柔軟に利用できるようになりました。アノテーションは注釈という意味で、「Java」ではアノテーションを使うことで、以下のことができます。
import java.lang.annotation.*; @Documented // Javadocにも反映 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @interface Information { String value(); } @Information("クラスの補助情報") public class MyClass { @Information("メソッドの補助情報") public void myMethod() { } }
Java8とJava11には、言語機能の拡張として大きく3つの違いがあります。ここからは主な違いについて解説します。
Java8では、デフォルトメソッド(default)と静的メソッド(static)がインターフェースに導入され、インターフェース内で一部のメソッド実装ができ、実用的なコードを共有できます。ただしインターフェース内のメソッドは、default・static・public・abstractである必要がありました。
Java11では、インターフェースにプライベートメソッド(privateメソッド)の宣言と実装が可能です。これにより、インターフェース内でのコードの再利用性と整理が向上しました。
Java8まで、アンダースコア(_)の変数名使用は許可されていましたが、一般的なルールではありませんでした。これは、コードの可読性を維持し、コンパイラの警告を抑制するのに役立ちます。
int _ = 42; // 未使用の変数
Java9から、アンダースコア(_)は変数名や識別子として使用することが禁止されました。これは将来的な言語機能のための予約としての措置で、Java11ではこの規則が継続されています。この変更により、未使用の変数をわかりやすい名前で宣言することが推奨されています。
Java8では、変数を宣言する際に必ずその変数の型を指定する必要がありました。
int myNumber = 777; // 整数型の変数
intは変数の型を表しmyNumberは変数の名前で、変数には整数型の値(ここでは777)が格納され、変数の型がわかりやすいという利点があります。Java10では、ローカル変数に対して型推論が導入されました。この新機能により、varキーワードを使用して変数を宣言する際に、初期値から変数の型を推論できます。
var myNumber = 777; // 型推論による変数宣言
この場合、myNumberは整数型(int)として推論され、コードがより簡潔になるため可読性が向上するのです。
Java8を学ぶには、実際にプログラムを書くことが理解を深める近道です。ここでは、以下の環境構築の手順を順番に解説します。
公式サイトのダウンロードページにアクセスします。このページから、「Java」の開発ツールであるJDK「JavaDeveropmentKit」が入手できます。
引用:Java Downloads | Oracle
下にスクロールして「Java SE Development Kit 8u391」(※2023年11月時点)をクリックすると、OSを選択する画面が出てきます。macOSかWindowsか、ご自分の使っているOSを選んでください。選択肢は「x86」と「x64」の2種類ですが、お使いのPCが32ビットであれば「x86」を、64ビットであれば「x64」を選びます。
ダウンロードした公式インストーラーを起動し、インストールを実行します。基本的にはインストーラーの指示に従って進めていきましょう。macOSにインストールする時は管理者権限が必要になるため、キーボードにある「control」ボタンを押しながらインストーラーをクリックして開きます。パスワードを入力するとインストーラーが起動するので、「インストール」ボタンをクリックすれば、Javaのインストールができます。
インストールのオプションは変更不要です。「インストールフォルダ」は、後述の環境変数設定に使用しますのでメモしておいてください。
進捗バーが100%になればインストールは完了です。
「次のステップ」というボタンが表示されている場合、こちらをクリックすると「Java」のリファレンスページが表示されます。「Java」のメソッドや機能を確認する際には必要となりますので保存しておいてもよいでしょう。「閉じる」ボタンで「Java」のインストールは完了です。
「Java」を実行するためには、環境変数の設定が必要です。環境変数とはOSや実行中のプログラムが、設定やシステム情報を参照するために使用されるものです。
Windowsのマークを右クリックして、「システム」→「システムの詳細設定」→「環境変数」を選んでください。
表示された画面の下部「システム環境変数」の中から「Path」を選択し、「編集」→「新規」をクリックします。
ウィンドウの左ペインに1行追加されるので、「Java」をインストールしたディレクトリパスに「\bin」を付け足して入力してください。設定を変更せず初期設定でインストールした場合は「C:\Program Files\Java\jdk-1.8\bin」となります。
入力したら「OK」をクリックします。
Windowsのスタートメニューから「java」→「更新の確認」を選んでください。Javaコントロール・パネルが起動するので、「更新タブ」をクリックします。特にそのままでも問題ありませんが、「通知のタイミング」と「更新確認のスケジュール」をお好みの設定に変更してください。
インストール直後は、「今すぐ更新」で最新にアップデートしておきましょう。「すでに最新です」のメッセージが表示されれば、現状の設定が最新であることを確認できます。WindowsUpdateと同じく、常に最新の状態へ保つようにしましょう。
Java8を安心して使い続ける際に注意すべきことは、主に以下の2つです。
せっかく開発した大切なJavaアプリケーションを守るための、重要な項目となるためしっかりと確認しておきましょう。
Java8は、2014年にリリースされたLTS(Long-Term Support)バージョンで、長期間のサポートが特徴です。OracleによるJava8の公式サポートを2022年3月に終了しましたが、商用使用に対しては延長サポートが提供されています。
ただし有償延長サポートの期限については、Oracleの最新のサポートポリシーに基づいて確認する必要があります。また、Oracle以外のベンダーが提供するJava8のサポート期間は異なる場合があるため、使用するJDKに応じて適切な情報の確認が重要です。
「Java」はおよそ3ヶ月に1回のペースで、アップデートがおこなわれます。この更新には、最新のセキュリティ修正プログラムやバグ修正の適用が含まれており、セキュリティと安定性が向上します。ただしJava8のアップデートには新しい言語機能やAPIの追加は含まれておらず、主にセキュリティ修正やバグ修正が中心です。新しい言語機能やAPIは、Java9以降の新しいバージョンで導入されています。
最新版へのアップデートは、Javaアプリケーションのセキュリティと安定性を保つために重要です。自動的に更新有無をチェックしてくれる機能も用意されているので、うまく活用して安全なJava開発環境を保つよう心掛けてください。
Java7以前のバージョンを使ってプログラミングをおこなっている方もいるかもしれません。しかしJava8より前のバージョンは、基本的にはサポートが終了しており、セキュリティのリスクも高まっている状況です。
Java8では新しい便利な機能も追加されており、安全性も開発生産性も向上しています。本記事を参考に、ぜひJava8を導入して安心できる環境で「Java」プログラミングをおこなってみてはいかがでしょうか。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール