Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9でのクラスローダーの変更点は何ですか?


すべてのJavaプログラムはJava仮想マシン(JVM)で実行されます 。コンパイル後、Javaクラスはプラットフォームに変換されます およびマシンに依存しないバイトコード 、およびコンパイルされたクラスは .classとして保存されます ファイル。使用しようとするときはいつでも、 ClassLoader そのクラスをメモリにロードします。クラスは、名前で参照されるときにJava環境に導入されます。クラスのロードは、クラスの実行が開始されると、クラスローダーによって実行され、 main() メソッドはそのクラスを開始する方法です。

Java 9のクラスローダーのマイナーな変更はほとんどありません:

  • システムクラスローダー URLClassLoader、のインスタンスであるJava9ではなくなりました むしろそれは内部クラスです。これはデフォルトのローダーです モジュール内のクラスの場合。
  • 拡張クラスローダー プラットフォームクラスローダーに名前が変更されました 。 Java SEプラットフォームのすべてのクラスは、プラットフォームクラスローダーを介して表示できます。また、Javaコミュニティプロセスのモジュール内のクラスも表示できますが、プラットフォームクラスローダーを介して表示できるJavaSEプラットフォームの一部ではありません。
  • アプリケーション Java SEプラットフォームの一部のクラスのどのプラットフォームクラスがプラットフォームクラスローダーによって定義されるかを定義するクラスローダーに依存することはできませんが、他のクラスはブートストラップクラスローダーによって定義されます。 。
  • 既存のコードがブートストラップクラスローダーを親クラスローダーとして使用するクラスローダーを作成する場合は、プラットフォームクラスローダーを親として使用するように変更する必要があります。
  • プラットフォームクラスローダー URLClassLoaderのインスタンスではありません 、むしろそれは内部クラスです。
  • ブートストラップクラスローダー 組み込みのクラスローダーです JVMの。ただし、ベースなどの重要なモジュールのクラスを定義します 。 - Xbootclasspath / aでデプロイされたアプリケーション または、 nullを使用してクラスローダーを作成します として 変更する必要があるかもしれません。

public class ClassLoaderTest {
   public static void main(String args[]) {
      System.out.println("Class Loader Test");
      ClassLoaderTest test = new ClassLoaderTest();
      try {
         test.showClassLoaders();
      } catch(ClassNotFoundException cnfe) {
         System.out.println(cnfe.getMessage());
      }
   }
   public void showClassLoaders() throws ClassNotFoundException {
      System.out.println("Classloader of this class: " + ClassLoaderTest.class.getClassLoader());
      System.out.println("Classloader of Permission: " + java.sql.SQLPermission.class.getClassLoader());
      System.out.println("Classloader of LinkedList: " + java.util.LinkedList.class.getClassLoader());
      return;
   }
}

出力

Class Loader Test
Classloader of this class: jdk.internal.loader.ClassLoaders$AppClassLoader@504bae78
Classloader of Permission: jdk.internal.loader.ClassLoaders$PlatformClassLoader@299a06ac
Classloader of LinkedList: null

  1. Java 9での@Deprecatedアノテーションの改善点は何ですか?

    @Deprecatedで注釈を付けることができる要素 この特定の要素が以下の理由で使用されなくなったことを意味します 使用するのは危険であり、エラーが発生する可能性があります。 将来のバージョンでは互換性がなくなる可能性があります。 将来のバージョンで削除される可能性があります。 より優れた、より効率的なソリューションがそれに取って代わりました。 Java 9には、次の2つの新しい要素が追加されています。以降 およびforRemoval 属性。 1)以降: この要素は、注釈付きAPI要素の非推奨バージョンを指定します。 2)forRemoval: 注釈付きのAPI要素を表す

  2. JavaでのCursorクラスの重要性は何ですか?

    カーソル オブジェクトのサブクラスです クラスであり、ポイントまたはインジケーターとして定義できます。 画面上。 カーソル ユーザーがマウスで操作するシステムからの入力を選択するために使用されます 。 カーソルで使用できるさまざまな種類のカーソル クラスはDEFAULT_CURSOR、CROSSHAIR_CURSOR、HAND_CURSOR、TEXT_CURSOR、WAIT_CURSOR Cursorクラスの重要なメソッドは、 getDefaultCursor()、getName()、getPredefinedCursor()、getSystemCustomCursor()です。 およびge