Java9-quick-guide
Java 9-概要
JAVA 9(別名jdk 1.9)は、JAVAプログラミング言語開発のメジャーリリースです。 初期バージョンは2017年9月21日にリリースされました。 Java 9リリースの主な目標は次のとおりです-
- JDKおよびJava Standard Editionプラットフォームを、小さなコンピューティングデバイスにうまく変換できるという意味で、モジュールベースにすること。
- JDKおよびJava実装の全体的なセキュリティを向上させるため。
- Javaコードライブラリと大規模アプリケーションのビルドプロセスとメンテナンスを、JAVA SEおよびEEプラットフォームで簡単に行えるようにするため。
- プラットフォームとJDKの両方に簡単に適用できるJavaプラットフォームの標準モジュールシステムを設計および実装する。
新機能
Java 8には90以上の拡張機能が追加されています。最も重要な拡張機能については以下で説明します-
- モジュール-モジュールとして導入された新しい種類のJavaプログラミングコンポーネント。名前付きの自己記述的なコードとデータのコレクションです。
- * REPL(JShell)*-Javaプラットフォームに追加されたRead-Eval-Print Loop(REPL)機能。
- * HTTP 2クライアント*-WebsocketとHTTP 2ストリームおよびサーバープッシュ機能をサポートする新しいHTTPClient API。
- *改良されたJavaDocs *-HTML5出力生成をサポートします。 生成されたAPIドキュメントに検索ボックスを提供します。
- Multirelease JAR -JAR形式を拡張して、クラスファイルの複数のJavaリリース固有バージョンが単一のアーカイブに共存できるようにします。
- コレクションファクトリメソッド-List、Set、およびMapインターフェイス用の新しい静的ファクトリメソッドは、これらのコレクションの不変インスタンスを作成します。
- プライベートインターフェイスメソッド-プライベートおよびプライベート静的メソッドを備えた拡張インターフェイス。
- プロセスAPIの改善-オペレーティングシステムプロセスを制御および管理するためのAPIの改善。
- ストリームAPIの改善-オブジェクトシリアル化データの着信ストリームをフィルター処理できるようにすることで、セキュリティと堅牢性が強化されました。
- リソースの試用の改善-try-with-resourcesステートメントで最終変数をリソースとして使用できるようになりました。
- * @ Deprecatedアノテーションの強化*-@Deprecatedアノテーションは、APIのステータスと意図した処理に関する詳細情報を提供するために改訂されました。
- 内部クラスのダイヤモンド演算子-推論された型の引数型を指定できる場合、匿名クラスでダイヤモンド演算子を使用できるようにします。
- オプションのクラスの改善-java.util.Optionalクラスに新しい便利なメソッドが追加されました。
- Multiresolution Image API -異なる解像度の一連の画像を単一の多重解像度画像にカプセル化できます。
- * CompletableFuture APIの改善*-CompletableFutureクラスの非同期メカニズムは、ProcessHandle.onExitメソッドでプロセスが終了するときにアクションを実行できます。
- *軽量JSON *-Java 9のjsonを介してドキュメントとデータストリームを消費および生成するために導入された軽量API。
- *リアクティブストリームAPI *-Java 9のリアクティブプログラミングをサポートするために、Java SE 9の新しいリアクティブストリームAPIが導入されました。
Java 9-環境設定
ローカル環境のセットアップ
Javaプログラミング言語用に独自の環境をセットアップする場合は、このセクションでプロセス全体をガイドします。 Java環境をセットアップするには、以下の手順に従ってください。
Java SEは無料でダウンロードできます。 https://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520l [ここをクリック]をダウンロードするには、オペレーティングシステムと互換性のあるバージョンをダウンロードしてください。
指示に従ってJavaをダウンロードし、*。exe *を実行してJavaをマシンにインストールします。 マシンにJavaをインストールしたら、正しいインストールディレクトリを指すように環境変数を設定する必要があります。
Windows 2000/XPのパスのセットアップ
Javaをc:\ Program Files \ java \ jdkディレクトリにインストールしたと仮定します-
- 「マイコンピュータ」を右クリックして、「プロパティ」を選択します。
- 「詳細」タブの下の「環境変数」ボタンをクリックします。
- 次に、「パス」変数を編集し、最後にJava実行可能ディレクトリへのパスを追加します。 たとえば、パスが現在 `+ C:\ Windows \ System32 +`に設定されている場合、次のように編集します
Windows 95/98/MEのパスのセットアップ
Javaをc:\ Program Files \ java \ jdkディレクトリにインストールしたと仮定します-
- 「C:\ autoexec.bat」ファイルを編集し、最後に次の行を追加します-
Linux、UNIX、Solaris、FreeBSDのパスのセットアップ
環境変数PATHは、Javaバイナリがインストールされている場所を指すように設定する必要があります。 これがうまくいかない場合は、シェルのドキュメントを参照してください。
たとえば、シェルとしてbashを使用する場合、*。bashrc *の最後に次の行を追加します-
人気のあるJavaエディター
Javaプログラムを作成するには、テキストエディターが必要です。 市場にはさらに洗練されたIDEがあります。 最も人気のあるものを以下に簡単に説明します-
- メモ帳-Windowsマシンでは、メモ帳(このチュートリアルで推奨)やワードパッドなどのシンプルなテキストエディタを使用できます。 Notepad ++は、機能を強化した無料のテキストエディターでもあります。
- Netbeans -これは、オープンソースで無料のJava IDEであり、https://www.netbeans.org/indexlからダウンロードできます。
- Eclipse -Eclipseオープンソースコミュニティによって開発されたJava IDEでもあり、https://www.eclipse.org/からダウンロードできます。
IDEまたは統合開発環境は、ソースコードエディター、ビルドツール、デバッガーなど、プログラミングを支援するすべての一般的なツールと機能を提供します。
Java 9-モジュールシステム
Java 9、モジュールと呼ばれる新しい種類のプログラミングコンポーネントが導入されました。 モジュールは、自己記述的なコードとデータのコレクションであり、それを識別するための名前があります。
特徴
モジュールコンポーネントでは、Java 9で次の機能強化が追加されました-
- 新しいオプションのフェーズであるリンク時間が導入されました。 このフェーズは、コンパイル時と実行時の中間です。 このフェーズでは、jlinkツールを使用してカスタムランタイムイメージを作成し、一連のモジュールを組み立てて最適化できます。
- javac、jlink、およびjavaには、モジュールパスを指定する追加オプションがあり、モジュールの定義をさらに特定します。
- モジュール形式のJARとして更新されたJAR形式。ルートディレクトリにmodule-info.classファイルが含まれています。
- 導入されたJMOD形式、ネイティブコードと構成ファイルを含めることができるパッケージ化形式(JARに類似)。
モジュールを作成する
モジュールを作成する手順に従って、com.finddevguides.greetingsと言います。
ステップ1
C:\> JAVA \ srcフォルダーを作成します。 次に、作成するモジュールの名前と同じフォルダーcom.finddevguides.greetingsを作成します。
ステップ2
C:\> JAVA \ src \ com.finddevguides.greetingsフォルダーに次のコードでmodule-info.javaを作成します。
module-info.java
module-info.javaは、モジュールの作成に使用されるファイルです。 このステップでは、com.finddevguides.greetingsという名前のモジュールを作成しました。 慣例により、このファイルはモジュール名と同じ名前のフォルダーに存在する必要があります。
ステップ3
モジュールにソースコードを追加します。 C:\> JAVA \ src \ com.finddevguides.greetings \ com \ finddevguides \ greetingsフォルダーに次のコードでJava9Tester.javaを作成します。
Java9Tester.java
慣例により、モジュールのソースコードは、モジュールの名前である同じディレクトリにあります。
ステップ4
C:\> JAVA \ modsフォルダーを作成します。 次に、作成したモジュールの名前と同じフォルダーcom.finddevguides.greetingsを作成します。 モジュールをmodsディレクトリにコンパイルします。
ステップ5
モジュールを実行して結果を確認しましょう。 次のコマンドを実行します。
ここで、module-pathはmodとしてモジュールの場所を提供し、-mはメインモジュールを示します。
出力
コンソールに次の出力を印刷します。
Java 9-REPL(JShell)
REPLはRead-Eval-Print Loopの略です。 JShellでは、javaにREPL機能があります。 REPLを使用すると、javacを使用してコンパイルせずにJavaベースのロジックをコーディングおよびテストし、計算結果を直接確認できます。
JShellの実行
コマンドプロンプトを開き、jshellと入力します。
JShellコマンドの表示
jshellコマンドが実行を開始したら、/helpと入力します。
JShellコマンドの実行
jshellコマンドの実行が開始されたら/importsと入力し、使用されたインポートを確認します。
JShellでの計算の実行。
JShellで簡単な計算を実行してみてください。
JShellで関数を作成して使用する
関数doubled()を作成して、intを取得し、その倍増した値を返します。
JShellを終了する
/exitと入力します。
Java 9-JavaDocsの改善
Javadocは、javadocツールを使用して生成できます。 現在、HTML 4.0形式のドキュメントを生成します。 Java 9では、コマンドライン引数で-html5オプションを使用して、html 5形式のドキュメントを生成できます。
古いスタイルのJavaドキュメント
C:/JAVAフォルダーの次のコードを検討してください。
Tester.java
ここで、jdk 7のjavadocツールを実行してドキュメントを生成します。
C:/JAVAディレクトリにjavaドキュメントページが作成され、次の出力が表示されます。
検索とHTML5をサポートする新しいJavaドキュメント
-html5フラグを指定してjdk 9のjavadocツールを実行し、新しいタイプのドキュメントを生成します。
D:/testディレクトリに更新されたJavaドキュメントページが作成され、次の出力が表示されます。
Java 9-マルチリリースJAR
Java 9では、jar形式が拡張され、プラットフォームごとに異なるバージョンのjavaクラスまたはリソースを維持および使用できるようになった新しい機能が導入されました。 JARでは、ファイルMANIFEST.MFファイルのメインセクションにエントリMulti-Release:trueがあります。 META-INFディレクトリには、バージョン固有のクラスとリソースファイルを格納するサブディレクトリ(Java 9では9から始まる)のバージョンサブディレクトリも含まれます。
この例では、マルチリリースjarを使用してTester.javaファイルの2つのバージョン(jdk 7用とjdk 9用)を作成し、異なるjdkバージョンで実行します。
ステップ
- ステップ1 *-フォルダーc:/test/java7/com/finddevguidesを作成します。 次の内容でTest.javaを作成します-
Tester.java
- ステップ2 *-フォルダーc:/test/java9/com/finddevguidesを作成します。 次の内容でTest.javaを作成します-
Tester.java
ソースコードをコンパイルします。
マルチリリースjarを作成する
JDK 7で実行
JDK 9で実行
Java 9-コレクションファクトリメソッド
Java 9では、List、Set、およびMapインターフェイスに新しいファクトリメソッドが追加され、不変インスタンスが作成されます。 これらのファクトリメソッドは、より簡潔で簡潔な方法でコレクションを作成するための便利なファクトリメソッドです。
コレクションを作成する古い方法
出力
次の出力を印刷します。
新しい方法
Java 9では、次のメソッドが、オーバーロードされた対応物とともに、List、Set、およびMapインターフェイスに追加されます。
注意点
- ListおよびSetインターフェイスの場合、of(…)メソッドはオーバーロードされ、0〜10個のパラメーターとvar argsパラメーターを持つパラメーターが含まれます。
- Mapインターフェイスの場合、of(…)メソッドは、0〜10個のパラメーターを持つようにオーバーロードされます。
- Mapインターフェースのパラメーターが10個を超える場合、ofEntries(…)メソッドを使用して、var argsパラメーターを受け入れます。
コレクションを作成する新しい方法
出力
次の出力を印刷します。
Java 9-プライベートインターフェイスメソッド
Java 8より前は、インターフェイスに次のタイプの変数/メソッドを含めることができます。
- 定数変数
- 抽象メソッド
したがって、インターフェイスにメソッドを実装することはできません。より正確には、Java 8より前のデフォルトの実装を実装することはできません。 例を見てください。
出力
次の出力が表示されます。
上記の例では、各ログメソッドには独自の実装があります。 Java 8インターフェースでは、次のタイプの変数/メソッドを使用できます。
- 定数変数
- 抽象メソッド
- デフォルトの方法
- 静的メソッド
Java 8を使用して、インターフェイス自体にデフォルトの実装と静的メソッドを用意しましょう。
出力
次の出力が表示されます。
上記の例では、繰り返しを繰り返しています。 Java 9インターフェースでは、次のタイプの変数/メソッドを使用できます。
- 定数変数
- 抽象メソッド
- デフォルトの方法
- 静的メソッド
- プライベートメソッド
- プライベート静的メソッド
プライベートメソッドを用意し、Java 9で使用しましょう。
出力
次の出力が表示されます。
Java 9-プロセスAPIの改善
Java 9では、オペレーティングシステムプロセスの制御と管理を担当するプロセスAPIが大幅に改善されました。 ProcessHandleクラスは、プロセスのネイティブプロセスID、開始時間、累積CPU時間、引数、コマンド、ユーザー、親プロセス、および子孫を提供するようになりました。 ProcessHandleクラスは、プロセスの活性をチェックし、プロセスを破壊するメソッドも提供します。 onExitメソッドがあり、CompletableFutureクラスは、プロセスが終了したときにアクションを非同期に実行できます。
Tester.java
出力
次の出力が表示されます。
Java 9-ストリームAPIの改善
開発者が一連のオブジェクトから集計操作を実行できるように、Javaにストリームが導入されました。 Java 9では、ストリームを改善するために追加されるメソッドはほとんどありません。
takeWhile(述語インターフェイス)
構文
takeWhileメソッドは、述語がfalseを返すまですべての値を取ります。 順序付けされたストリームの場合、指定された述語に一致するこのストリームから取得された要素の最長プレフィックスで構成されるストリームを返します。
例
出力
takeWhileメソッドは、a、b、cのすべての値を取り、stringが空になると、実行を停止しました。
dropWhile(述語インターフェイス)
構文
dropWhileメソッドは、述語がtrueを返すまで、開始時にすべての値を破棄します。 順序付けされたストリームの場合、指定された述語に一致する要素の最長の接頭辞を削除した後、このストリームの残りの要素で構成されるストリームを返します。
例
出力
dropWhileメソッドは、a、b、およびcの値をドロップし、文字列が空になると、すべての値を取得します。
繰り返す
構文
iterateメソッドには、hasNext述語がfalseを返すとループを停止するパラメーターとしてhasNext述語が含まれるようになりました。
例
出力
ofNullable
構文
ofNullableメソッドは、NullPointerExceptionsを防ぎ、ストリームのnullチェックを回避するために導入されました。 このメソッドは、nullでない場合は単一の要素を含むシーケンシャルStreamを返し、そうでない場合は空のStreamを返します。
例
出力
Java 9-リソースの試用の改善
try-with-resourcesステートメントは、1つ以上のリソースが正式に宣言されたtryステートメントです。 ここで、リソースは、不要になったら閉じる必要があるオブジェクトです。 try-with-resourcesステートメントは、要件の終了後に各リソースが確実に閉じられるようにします。 java.lang.AutoCloseableまたはjava.io.Closeableインターフェースを実装するオブジェクトは、リソースとして使用できます。
Java 9より前では、リソースはtryの前またはtryステートメント内で宣言され、以下の例に示されています。 この例では、BufferedReaderをリソースとして使用して文字列を読み取り、BufferedReaderを閉じます。
Tester.java
出力
ここでは、try statment内でリソースbr1を宣言してから使用する必要があります。 Java9では、br1を宣言する必要がなくなり、次のプログラムでも同じ結果が得られます。
Tester.java
出力
Java 9-@Deprecatedアノテーションの強化
@Deprecated注釈は、Java 5バージョンで導入されました。 @Deprecatedで注釈されたプログラム要素は、次の理由のいずれかのために使用すべきではないことを意味します-
- その使用はエラーにつながる可能性があります。
- 将来のバージョンでは互換性がない可能性があります。
- 将来のバージョンでは削除される可能性があります。
- より優れた効率的な代替手段がそれをスーパーシードしました。
非推奨の要素が使用されるたびに、コンパイラは警告を生成します。 Java 9では、@ Deprecatedアノテーションに2つの新しい機能強化が行われました。
- forRemoval -注釈付きの要素が将来のバージョンで削除されるかどうかを示します。 デフォルト値はfalseです。
- since -注釈付き要素が非推奨となったバージョンを返します。 デフォルト値は空の文字列です。
sinceで非推奨
Java 9のブールクラスjavadocの次の例は、@ Deprecatedアノテーションでのsince属性の使用を示しています。
[Class]
forRemovalで非推奨
Java 9のSystemクラスjavadocの次の例は、@ Deprecated注釈でのforRemoval属性の使用を示しています。
[Class]
Java 9-内部クラスのダイヤモンド演算子
コードを読みやすくするために、Java 7でDiamond演算子が導入されましたが、匿名内部クラスでは使用できませんでした。 Java 9では、匿名クラスでも使用して、コードを簡素化し、読みやすさを向上させることができます。 Java 9より前の次のコードを検討してください。
Tester.java
出力
Java 9では、以下に示すように、匿名クラスで<>演算子を使用できます。
Tester.java
出力
Java 9-オプションのクラスの改善
nullチェックとNullPointerException問題を回避するために、Java 8でオプションのクラスが導入されました。 Java 9では、機能を改善するために3つの新しいメソッドが追加されました。
- ストリーム()
- ifPresentOrElse()
- or()
stream()メソッド
構文
値が存在する場合は、その値のみを含むシーケンシャルStreamを返します。それ以外の場合は、空のStreamを返します。
例
出力
ifPresentOrElse()メソッド
構文
値が存在する場合、その値を使用して指定されたアクションを実行し、そうでない場合は、指定された空ベースのアクションを実行します。
例
出力
or()メソッド
構文
値が存在する場合は、値を説明するOptionalを返します。それ以外の場合は、提供機能によって生成されるOptionalを返します。
例
出力
Java 9-多重解像度画像API
Java 9では、異なる解像度のバリエーションを持つ複数の画像をサポートする新しい多重解像度画像APIが導入されました。 このAPIを使用すると、異なる解像度の一連の画像を単一の多重解像度画像として使用できます。 以下は、多重解像度画像の主要な操作です。
- * Image getResolutionVariant(double destImageWidth、double destImageHeight)*-指定されたサイズでこの論理イメージを表すのに最適なバリアントである特定のイメージを取得します。
- * List <Image> getResolutionVariants()*-すべての解像度のバリエーションの読み取り可能なリストを取得します。
例
出力
CompletableFuture APIの改善
CompletableFutureクラスは、値とステータスを明示的に設定することで完了することができるFutureを表すためにJava 8で導入されました。 java.util.concurrent.CompletionStageとして使用できます。 将来の完了時にトリガーされた依存関数とアクションをサポートします。 Java 9では、CompletableFuture APIがさらに強化されました。 以下は、APIに行われた関連する変更です。
- 遅延とタイムアウトのサポート。
- サブクラス化のサポートの改善。
- 新しいファクトリメソッドが追加されました。
遅延とタイムアウトのサポート
このメソッドは、指定されたタイムアウトの前に完了しない場合、指定された値でこのCompletableFutureを完了します。
このメソッドは、指定されたタイムアウトの前に完了しない場合、このCompletableFutureを例外的にTimeoutExceptionで完了します。
サブクラス化のサポートの改善
Executorを指定しない非同期メソッドに使用されるデフォルトのExecutorを返します。 このメソッドは、サブクラスでオーバーライドされて、Executorを返し、少なくとも1つの独立したスレッドを提供します。
CompletionStageメソッドによって返される型の新しい不完全なCompletableFutureを返します。 CompletableFutureクラスのサブクラスは、このメソッドをオーバーライドして、このCompletableFutureと同じクラスのインスタンスを返す必要があります。 デフォルトの実装は、CompletableFutureクラスのインスタンスを返します。
新しいファクトリーメソッド
このファクトリメソッドは、指定された値で既に完了している新しいCompletableFutureを返します。
このファクトリメソッドは、指定された値で既に完了している新しいCompletionStageを返し、CompletionStageインターフェイスに存在するメソッドのみをサポートします。
このファクトリメソッドは、指定された例外で例外的に完了し、インターフェイスCompletionStageに存在するメソッドのみをサポートする新しいCompletionStageを返します。
Java 9-その他の機能
前述の機能とは別に、Java 9では、JDKプラットフォームに対してさらに多くの機能強化が行われています。 それらの一部を以下にリストします。
- GC(ガベージコレクター)の改善
- スタックウォーキングAPI
- 着信シリアル化データのフィルター処理
- アプレットAPIの廃止
- 文字列連結を示す
- 強化されたメソッドハンドル
- JavaプラットフォームロギングAPIおよびサービス
- コンパクトストリング
- NashornのパーサーAPI