【Javaの記事】リフレクションの仕組みを簡単に理解

JDBC を学習した後、リフレクション機構を使用するので、リフレクション機構に関する知識ポイントを確認してください。


    Javaリフレクション メカニズムは、Java 言語の重要な機能です。Java リフレクション メカニズムを学習する前に、まずコンパイル時間と実行時間という 2 つの概念を理解する必要があります。

  • コンパイル期間とは、ソースコードをコンパイラに渡して、コンピュータが実行できるファイルにコンパイルするプロセスを指します。Java では、Java コードをクラス ファイルにコンパイルするプロセスです。コンパイル期間中は、一部の翻訳機能のみが実行され、コードは実行のためにメモリに置かれず、エラーのチェックなど、テキストとしてのみ操作されます。
  • ランタイムは、コンパイルされたファイルをコンピューターに渡して、プログラムの最後まで実行します。いわゆるランタイムは、ディスク上のコードをメモリに配置して実行します。

  Java リフレクション メカニズムは実行中の状態にあります。どのクラスについても、このクラスのすべてのプロパティとメソッドを知ることができます。どのオブジェクトについても、そのメソッドとプロパティを呼び出すことができます。この情報の動的取得とオブジェクトの動的呼び出しメソッド Java 言語のリフレクション機構と呼ばれる機能。簡単に言えば、リフレクション メカニズムとは、プログラムが実行時に独自の情報を取得できるという事実を指します。Java では、クラスの名前が与えられている限り、クラスのすべての情報がリフレクション メカニズムを介して取得されます。

  Java リフレクション メカニズムは、サーバー プログラムやミドルウェア プログラムで広く使用されています。サーバー側では、クライアントの要求に応じて、オブジェクトの特定のメソッドを動的に呼び出す必要があることがよくあります。

反射を理解するには?


  一般に、特定のクラスを使用する場合、事前にそのクラスとその使用目的がわかっている.新しいオブジェクトを介して直接オブジェクトをインスタンス化して作成し、このオブジェクトを使用してクラスを操作できる.これは.正投影

  リフレクションとは、最初にどのクラスを初期化すればよいか分からず、new を使用してインスタンス化してオブジェクトを作成することができないということです.これは主に JDK が提供するリフレクション API を通じて実現されます.どのクラスを操作したいかしかわかりません.実行時に、クラスの完全な構造を取得し、対応するメソッド (リフレクション)を呼び出すことができます。


要約する


1. Java リフレクション メカニズムとは何ですか?

   Java のリフレクション メカニズムは、プログラムの実行状態では、任意のクラスのオブジェクトを構築でき、任意のオブジェクトが属するクラス、任意のクラスのメンバー変数とメソッドを知ることができ、任意のオブジェクトのメソッドを知ることができることを意味します。プロパティとメソッド。この動的にプログラム情報を取得し、動的にオブジェクトを呼び出す機能を Java 言語のリフレクション機構と呼びます。リフレクションは動的言語の鍵と考えられています。
  もっと簡単に言うと、Java プログラムが実行されているとき、クラスのリフレクション オブジェクトが新しい方法で作成されず、関連する操作がクラスに対して実行されます。

  • オブジェクトのメンバー変数を取得して代入
  • オブジェクトのメソッドを呼び出します (コンストラクターを含み、パラメーターの有無にかかわらず)
  • オブジェクトが属するクラスを決定する

2. Java リフレクション メカニズムで Class を取得する 3 つの方法と違いは?


3 つの方法:

  • MyClass.class から取得する
  • Class.forName("クラスのグローバルネーミング") で取得
  • new MyClass().getClass() で取得

方法の比較:

  • MyClass.class から取得した JVM は、ClassLoader クラス ローダーを使用してクラスをメモリにロードしますが、クラスの初期化作業は行わず、java.lang.Class オブジェクトを返します。
  • Class.forName("クラスのグローバル ネーミング") で取得. 同様に、クラスは JVM によってメモリにロードされ、クラスの静的初期化が実行され、java.lang.Class オブジェクトが生成されます。戻ってきた
  • new MyClass().getClass() によって取得されます。このメソッドはインスタンス化に new を使用するため、== 静的初期化と非静的初期化が機能します ==、getClass メソッドは最上位の Object クラスのメソッドに属し、任意のサブクラス オブジェクトどのサブクラスが呼び出すかを呼び出すことができ、そのサブクラスの java.lang.Class オブジェクトを返します

  この 3 つの方法で、JVM ヒープ領域内の対応するクラスの java.lang.Class オブジェクトが最終的に同じものに属する、つまりメモリ アドレスが同じになり、== 二重等号比較の結果が true になる;


 記事の内容は百度百科事典またはいくつかの記事から得た私自身の理解であり、将来の私自身のレビューのみを目的としています.侵害がある場合は、私に連絡して削除してください;

おすすめ

転載: blog.csdn.net/m0_64231944/article/details/128575574