Java 9 モジュール

WBOY
リリース: 2024-08-30 15:53:56
オリジナル
647 人が閲覧しました

Java 9 モジュールは、特定の機能を提供するパッケージのコレクションとして導入される新しいエンティティです。 Java 9 モジュールは、パッケージをモジュールに再配置して分類した後の Java 開発キットの最初のリリースです。これは、Java 9 プラットフォーム モジュール システム (JPMS) としても知られています。 Java 9 では、必要なモジュールのみを含めることでランタイムのサイズを削減できます。たとえば、GUI をサポートしていないデバイスの場合は、GUI モジュールを含めずにランタイムを作成できます。

Java 9 モジュール

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

主なハイライト

  • Java 9 モジュールは、パッケージの高レベルの抽象化の実装です。
  • 機能に関連するすべてのパッケージが 1 つのモジュール (合計 95 モジュール) にパックされています。これにより、プラットフォームの完全性が向上し、強力なカプセル化が実現します。
  • Java アプリケーションまたは Java API 用のモジュール式 JAR ファイルとして個別の Java モジュールを作成できます。

Java 9 モジュール システム

  • Java 9 モジュールでは、機能的に関連したパッケージがモジュールと呼ばれる再利用可能なグループに集約されます。
  • Java 9 モジュールにはリソース (画像や XML ファイルなど) が含まれる場合があります。 java.base モジュールは、すべてのモジュールに必要な独立したモジュールです。
  • システム モジュールは標準であり、名前は java で始まります。
  • たとえば、JavaFX モジュール (JavaFX で始まる名前)、JDK モジュール (jdk で始まる名前)、Oracle モジュール (oracle で始まる名前) などです。

Java 9 モジュールの種類

1.アプリケーションモジュール

  • これらのモジュールはプログラマーによって作成されます。
  • アセンブルされたパスの非公式 JAR には、モジュールの名前と定義を含むコンパイル済みの module-info.a クラス ファイルが含まれています。

2.自動モジュール

  • 既存の JAR ファイルがモジュールに追加されると、自動モジュールが作成されます。
  • JAR の名前がモジュールの名前になります。

3.名前のないモジュール

  • これはクラスパスにロードされるが、モジュール パスにはロードされないクラスまたは JAR です。
  • これは、以前に作成された Java コードとの下位互換性を維持するための包括的なモジュールです。

モジュール記述子

  • module-info.java ファイルには、モジュール定義またはモジュールを説明するメタデータが含まれています。
  • module-info.java をコンパイルすると、モジュール記述子を含む module-info.class が取得されます。これはモジュールのルート フォルダーに保存されます。
  • モジュール記述子は 1 つ以上のエクスポートで構成され、句が必要です。
  • パッケージを他のモジュールにエクスポートしたり、他のモジュールのパッケージを使用したりできるため、独立したモジュールです。
  • メタデータには、一意の名前、exports 句、requires 句の 3 つが含まれます。
  • 一意の名前: モジュールに与えられた名前。

コード:

module eg.com.module1 
{

}
ログイン後にコピー
  • エクスポート条項: モジュール内のパッケージは、他のモジュールが使用できるようにエクスポートできます。

コード:

module eg.com.module1 
{
   exports eg.com.module1.service;
}
ログイン後にコピー
  • Requires 句: 他のモジュールからのパッケージが必要な場合に使用されます。

コード:

{
   requires eg.com.module1;
}
ログイン後にコピー

Java 9 モジュール システム アプリケーションのモジュール

  • JDK の bin フォルダーから JDK セットのモジュールを一覧表示します。 CLI で次のコマンドを実行します java –list-modules
  • キーワード module は、モジュールを宣言するために使用されます。モジュール本体は、 module modulename { }
  • のように中かっこで囲まれています。
  • exports モジュール ディレクティブにより、モジュールのパッケージが他のすべてのモジュールのコードにアクセスできるようになります。
  • エクスポート…適格レポートを定義します。 エクスポートされたパッケージにアクセスできるパッケージのリストは、カンマ区切りのリストで正確に指定できます。

コード:

module com.educba.util 
{
exports com.educba.app;
exports com.educba.security to com.educba.client, com.educba.producer;
}
ログイン後にコピー
  • オープン モジュール ディレクティブが使用されると、特定のモジュール内のすべてのパッケージが実行時および他のすべてのモジュールへのリフレクションを介してアクセス可能になります。モジュール内のすべてのパッケージへのランタイムのみのアクセスを許可するには、次のようにモジュール全体を開くことができます。

コード;

open module <em>modulename</em>

{
// module directives
}
ログイン後にコピー
  • To allow runtime-only access to packages in a module. An open module directive of the form opens package- can be used. The code in other modules can access the public types of a package and its nested public and protected types at runtime only. Reflection can be used to access all the types and the types’ members in the specified package.
  • The code in the listed modules can access the public types of a package and its nested public and protected types at runtime only. Reflection to code in the specified modules can be used to access all of the types and types’ members in the specified package.

How to Create a New Java 9 Module?

  • Create a directory structure
src\com.educba\com\educba
ログイン後にコピー
  • In the command prompt
mkdir –r src\com.educba\com\educba
ログイン後にコピー
  • Create a new module in a text editor and save it as a java file module-info.java.
module com.educba
{ }
ログイン後にコピー
  • Set the environment variable JAVA_HOME to the path where Java is installed.

For example, JAVA_HOME C:\Program Files\Java\jdk-9\bin

Add %JAVA_HOME% to PATH in control Panel->system->advanced system setting->environment variables.

  • To see the compiled module descriptor in the CLI.

Code:

>javap mods/com.educba/module-info.class
ログイン後にコピー

Output:

Java 9 モジュール

It shows requires java.base in the modules definition, though we had created an empty module. It is because java.base is the basic and independent module. All other modules depend on it.

Comparison Table of JDK 8 and JDK 9

The most obvious difference between JDK 8 and JDK 9.

Feature Java 8 Java 9
Top Level component Package Module
New features launched ●       Lambda Expressions

●       Stream API

●       Date API

●       Java Module System (Jigsaw Project)

●       Java REPL

●       Milling Project Coin

Performance Compromised performance due to big size of jdk Improved performance
Testing and maintaining applications Difficult with large size of JRE Easy with REPL and reduced size depending on modules included. JShell or REPL: Read and evaluate Print Loop for easy execution and testing of   Java Constructs like class, interface, enum, object, and statements easily.
Security It is compromised because of no encapsulation. Internal APIs can be accessed easily by users and potential hackers. Reflection could be used to learn about private members too. String security as Reflection does not provide access to private members. Only those exposed by export keywords are available through reflection.
Packaging format JAR JMOD can include native code and configuration files.

結論

Java 9 は、分散アーキテクチャの新しいコーディング技術と互換性を持たせるために Java コードを再構築するために最も求められているものです。必要なモジュールを含めることを選択できるため、実行可能ファイルのサイズが削減され、パフォーマンスが向上します。強力なカプセル化により、潜在的なハッカーが利用できるクラスが少なくなり、より高いセキュリティが可能になりました。モジュール性により、依存関係の宣言と決定に透明性が提供されます。

よくある質問

Q1.レガシー アプリケーションを JAVA 9 に移行するにはどうすればよいですか?

答え: 従来のアプリケーションを Java 9 でコンパイルできます。コンパイル時に、Java 9 のモジュール構造にないコード部分でエラーが発生します。ここで、ある程度の費用が必要になります。必要なモジュールを含める時間です。 Jshell を使用して、必要な出力を得るために新しいコードをテストできます。

Q2.システムによってどのモジュールが提供されているかを確認するにはどうすればよいですか?

答え: java –list-modules を使用してモジュールをリスト表示できます。それらの機能についての知識を得るには、ドキュメントを参照する必要があります。

Q3. JAVA で動作するには IDE をインストールする必要がありますか?

答え: いいえ。コマンド ライン インターフェイスにどれだけ慣れているかによって異なります。 IDE は、ユーザーには知られていない多くのジョブをバックエンドで実行します。 CLI は、問題を特定して解決するための最良のオプションです。

Q4.モジュール内のパブリック パッケージにアクセスするにはどうすればよいですか?

回答: パブリック パッケージ info.java および required_pa​​ckage_name にアクセスするには、モジュールのモジュール定義に次の内容を追加する必要があります。

以上がJava 9 モジュールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート