Java 9 –新しいJavaの機能について知っておくべきことすべて
公開: 2018-04-24非常にアクセスしやすいプログラミング言語であるJavaは、世界中の開発者にとって簡単なものです。 1995年の開始以来、この言語はさまざまな業界で広く使用されています。
今日、あなたはあなたの電話でJavaを見つけるでしょう。 AndroidOSとAndroidが提供する無数のアプリを強化します。 膨大なプレーヤーベースを持つMinecraftのようなゲームの開発に使用されます。 また、店頭でクレジットカード情報を読み取ったり、システムと銀行の間で情報を提供したりするなどのビジネスアプリケーションにも使用されます。
3年のギャップの後、Javaは新しいエディションであるJava SE 9を公開しました。いくつかの重要なアーキテクチャの変更とアドオン機能により、JavaSE9は開発者が切望していた強力なソリューションを提供します。
Java 7は、2011年にtry-with-resourceを追加し、より優れたリソース管理機能を提供します。
Java 8はラムダ式を追加しました。これは良い動きですが、OOPパラダイムではわずかに欠陥があります。
現在、 Java Solutionsにより、プログラマーはプライベートメソッドを持つことができます。 プライベート静的メソッド! はい、あなたはその権利を読んでいます!
Java SE 8は、開発者がさまざまな感情を持って受けた多くの構造上の変更を提供しました。 主に、これらはJavaSE9が克服しようとしたJavaSE8の欠点です。
- JDKは、小型のコンピューティングデバイスではナビゲートできませんでした
- アプリケーションのパフォーマンスに全体的な改善はありませんでした
- JDKの全体的なセキュリティとメンテナンスはありませんでした
- Java開発者は、コードライブラリとより大きなアプリケーションを構築して維持するのが困難に直面していました
それでは、Java9が前任者に対して提供する主な変更と拡張機能を見てみましょう。
Java9でAPIアップデートを処理する
従来、JavaのAPIは本質的に原始的でした。 新しいプロセスの起動、出力およびエラーストリームのリダイレクトをサポートします。 Java 9では、ProcessAPIの新しい更新により次のことが可能になります。
- 現在およびその他のJVMプロセスのPIDを取得する
- サブプロセスの管理
- サブプロセスの管理
- システムで実行されているプロセスのPID、名前、リソース使用量などの情報を取得します。
これはサンプルコードであり、現在のPIDと現在のプロセス情報を出力します。
public class NewFeatures
{
public static void main(String [] args)
{
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("PID:"+ currentProcess.getPid());
ProcessHandle.Info currentProcessInfo = currentProcess.info();
System.out.println("Info:" + currentProcessInfo);
}
}
Java9のHTTP/2クライアント
この機能は、今後のリリースで改革される予定であるか、完全に削除される可能性もあります。
以前は、開発者はサードパーティのライブラリに依存していました。たとえば、Apache HTTP、Jerseyなどです。 JavaのHTTPAPIは、HTTP / 1.1仕様よりも前のものであり、同期的であり、保守が困難です。 これらの制限により、新しいAPIを追加する必要がありました。 新しいHTTPクライアントAPIは、次の機能を提供します。
- ほとんどのHTTPリクエストを処理するためのシンプルで簡潔なAPI
- HTTP/2仕様のサポート
- よりよい性能
- より良いセキュリティ
- さらにいくつかの機能強化
これは、新しいAPIを使用してHTTPGETリクエストを作成するためのコードスニペットです。 これは、ファイルmodule-info.javaで定義されているモジュールです。
module newfeatures{
requires jdk.incubator.httpclient;
}
次のコードはHTTPクライアントAPIを使用しています。 これはjdk.incubator.httpclientモジュールの一部です。
import jdk.incubator.http.*;
import java.net.URI;
public class Http2Feature{
public static void main(String[] args) throws Exception{
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest
.newBuilder(new URI(http://httpbin.org/get;))
.GET()
.version(HttpClient.Version.HTTP_1_1)
.build();
HttpResponse.String response = client.send(request,
HttpResponse.BodyHandler.asString());
System.out.println("Status code:" + response.statusCode());
System.out.println("Response Body:" + response.body());
}
}
}
Java9のその他の同時実行更新機能
Java 9では、java.util.concurrent.Flowという新しいクラスが導入されました。これは、パブリッシュ/サブスクライブフレームワークの実装をサポートします。 このフレームワークにより、開発者はコンポーネントを構築できます。 これらのコンポーネントは、データを生成するパブリッシャーとデータを消費するサブスクライバーを設定することにより、データのライブストリームを非同期的に消費できます。 これらは新しいインターフェースです:
- java.util.concurrent.Flow.Publisher
- java.util.concurrent.Flow.Subscriber
- java.util.concurrent.Flow.Subscription
- java.util.concurrent.Flow.Processor(パブリッシャーとサブスクライバーの両方として機能します)。
Java 9でのJavaシェルスクリプト(Read-Eval-Print-Loop)
Project Kullaの目標は、Java 9用のREPL(Read-Eval-Print-Loop)ツールの追加を調査することでした。このリリースのJavaは、JShellと呼ばれる特別なコマンドラインツールを備えています。 ここでの目標は、REPLの普及と使用の最大化です。 それで、それはどういう意味ですか? これで、実行するために数行のコードを別のメソッドでラップする必要はありません。 効率的? はいと言います。
たとえば、Scalaでは、単純なHelloWorldプログラムはscala>println( "Hello World");として記述されます。
次の画像に示すように、JShellコマンドを実行してみましょう。
Java9でのプロジェクトジグソー
Java 9の新機能の切り札は、まったく新しいモジュールシステムです。 複雑なシステムの作成には、多くの場合、あいまいさをもたらす高レベルの複雑なコードが含まれます。 コードが複雑になると、2つの基本的な問題に直面します。コードのカプセル化が難しいことと、システムの異なるJARファイル間に明示的な依存関係があるという概念がないことです。 すべてのパブリッククラスには、クラスパス上の他のパブリッククラスからアクセスできます。 これにより、パブリックAPIを意図していないクラスが不要に使用されることになります。 さらに、クラスパス自体に問題があります。必要なすべてのJARが存在するかどうか、および重複するエントリについてはどうすればよいでしょうか。 モジュールシステムは両方の問題を解決します。
ここで、Java9の堅牢な性質が見られます。 モジュラーJARファイルには、追加のモジュール記述子が含まれています。 このモジュール記述子では、`requires`ステートメントを使用して他のモジュールへの依存関係を表現します。 さらに、 `exports`ステートメントは、さまざまなモジュールからアクセスできるパッケージを制御します。 デフォルトでは、エクスポートされていないすべてのパッケージがモジュールにカプセル化されます。
このプロジェクトには、次のようなさまざまなJEPがあります。
JEP 200 –モジュラーJDK:これは、Javaプラットフォームモジュールシステムを適用して、コンパイル時、ビルド時、または実行時に組み合わせることができるJDKをモジュール化します。
JEP 201 –モジュラーソースコード:モジュールの作成に使用され、ビルドツールで作成されたモジュールをコンパイルできます
JEP 220 –モジュラーランタイムイメージ:このJEPは、モジュールに対応するようにJDKおよびJREランタイムイメージを再構築することにより、パフォーマンス、セキュリティ、および保守性を向上させます。
JEP 282 – Javaリンカーとして知られるjlink:パッケージ化モジュールとしての使用法とそれらの依存関係をより少ない実行時間に。
マルチリリースJARファイル
新しいバージョンでJavaプラットフォームの新機能を活用するには、ライブラリ開発者はライブラリの新しいバージョンをリリースする必要があります。 間もなく、開発者によって維持されているライブラリの複数のバージョンがあり、壊滅的となる可能性があります。 この制限を克服するために、Java 9はJARファイルのマルチリリースを特徴としており、開発者はさまざまなJavaバージョンのさまざまなバージョンのクラスファイルを使用してJARファイルを作成できます。 この例を見てください。
現在のJARファイルの図は次のとおりです。
jarルート
– A.class
– B.class
– C.class
マルチリリースJARファイルは次のようになります。
jarルート
– A.class
– B.class
– C.class
– META-INF
–バージョン
– – 9
– – – – A.class
– – 10
– – – – B.class
前の図では、JARファイルは2つのJavaバージョン9および10のクラスファイルをサポートしていました。したがって、JARがJavaのバージョン9で実行されると、バージョン–9フォルダーの下のA.classが実行用に選択されます。
マルチリリースJARファイルをサポートしない以前のバージョンのJavaでは、versionsディレクトリの下のクラスは使用されません。 したがって、Java 8でマルチリリースJARファイルを実行する場合は、単純なJARファイルを実行するのと同じくらい優れています。
私の意見では、Javaで状況が変わり始めています。 そして、これは成長傾向です。 Javaとその使用の人気が影響を受けるということですか? 全くない。 Javaは、今日のテクノロジー業界において、信じられないほど強力で堅牢なプログラミング言語であり続けています。 Javaの学習を開始し、Javaがあなたのキャリアに変化をもたらすのを見てください。 幸運を!
著者のメモ:
その技術記事は、DevOps、ビッグデータ、Pythonなどのトレンドテクノロジーに取り組んでいるSumitによって提供されています。 そして、Edurekaのデジタルマーケティングチームで。