2020年の最新のJavaリフレクションインタビューの質問



2020 Latest Java Reflection Interview Questions



1. newを使用してオブジェクトを作成することに加えて、他にどのような方法を使用してオブジェクトを作成できますか?

Javaリフレクションを使用してオブジェクトを作成してください!

2. Javaリフレクションを使用してオブジェクトを作成するのは効率的ですか、それとも新規を使用してオブジェクトを作成するのは効率的ですか?

newを介してオブジェクトを作成する効率は比較的高いです。リフレクションを使用する場合は、最初にクラスリソースを探し、クラスローダーを使用して作成します。プロセスが面倒なので、効率が低い



3.Javaリフレクションの役割

リフレクションメカニズムでは、実行時に、任意のクラスについて、任意のオブジェクトについてこのクラスのすべての属性とメソッドを知ることができ、そのメソッドのいずれかを呼び出すことができます。 Javaでは、クラスの名前が指定されている限り、クラスのすべての情報はリフレクションメカニズムを介して取得できます。

情報を動的に取得し、オブジェクトのメソッドを動的に呼び出す機能は、Java言語のリフレクションメカニズムと呼ばれます。



4.反射メカニズムはどこで使用されますか?

jdbcは典型的な反射です

Class.forName('com.mysql.jdbc.Driver.class')//Load MySQL driver class

これは反省です。 hibernateやstrutsなどのフレームワークは、リフレクションを使用して実装されます。

5.リフレクションの実現:

最初のステップ:Classオブジェクトを取得します。4つのメソッドがあります。



1)Class.forName( 'クラスパス')

2)クラス名.class

3)オブジェクト名.getClass()

4)基本タイプのパッケージングクラス。パッケージングクラスのTypeプロパティを呼び出して、パッケージングクラスのClassオブジェクトを取得できます。

6. Javaリフレクションを実装するクラス:

1)クラス:実行中のJavaアプリケーションのクラスとインターフェースを示します

注:オブジェクト情報へのすべてのアクセスは、Classクラスによって実装される必要があります。

2)フィールド:クラスとインターフェースに関する属性情報、およびそれらへの動的アクセス権を提供します。

3)コンストラクター:クラスの単一の構築メソッドとそのアクセス権に関する情報を提供します

4)メソッド:クラスまたはインターフェースのメソッドに関する情報を提供します

7.反射メカニズムの長所と短所:

利点:

1)柔軟性を向上させるために、実行時にクラスインスタンスを動的に取得する機能

2)動的コンパイルと組み合わせる

短所:

1)リフレクションのパフォーマンスが低く、メモリ内のオブジェクトを解析するためにバイトコードを解析する必要があります。

解決:

1. setAccessible(true)を使用してJDKのセキュリティチェックをオフにして、反射速度を向上させます

2.クラスのインスタンスが複数回作成されると、キャッシュははるかに高速になります

3. ReflflectASMツールクラス、バイトコード生成による反射速度の高速化

2)比較的安全ではなく、カプセル化を破ります(プライベートメソッドとプロパティはリフレクションを通じて取得できるため)

8.JavaリフレクションAPI

反射 生成に使用 JVM のクラス、インターフェイス、またはオブジェクトに関する情報。

  1. クラスクラス:リフレクションのコアクラス。クラスのプロパティ、メソッド、その他の情報を取得できます。
  2. フィールドクラス:Java.lang.reflecパッケージ内のクラスで、クラスのメンバー変数を表します。これを使用して、クラスの属性を取得および設定できます。

値。

  1. メソッドクラス:クラスのメソッドを表すJava.lang.reflecパッケージ内のクラス。クラス内のメソッド情報を取得するために使用できます。

実行方法。

  1. コンストラクタークラス:クラスを構築するメソッドを表す、Java.lang.reflecパッケージ内のクラス。

9、 リフレクションを使用する手順(Classオブジェクトを取得し、objectメソッドを呼び出します)

  1. 操作するクラスのClassオブジェクトを取得します。それが反射の中核です。 Classオブジェクトを介して、クラスのメソッドを自由に呼び出すことができます。
  2. Classクラスのメソッドの呼び出しは、リフレクションの使用段階です。
  3. リフレクションAPIを使用して、この情報を操作します。

10.クラスオブジェクトを取得する方法はいくつかあります

オブジェクトを呼び出す getClass()メソッド

Person p=new Person() Class clazz=p.getClass()

クラスを呼び出す クラス 対応する取得する属性 クラス オブジェクト

Class clazz=Person.class

使用する クラス クラスで ** forName()**静的メソッド(最も安全/最高のパフォーマンス)

Class clazz=Class.forName('The full path of the class') (Most used)

操作したいクラスのClassオブジェクトを取得すると、Classクラスのメソッドを介してクラスのメソッドを取得して表示できます。

そして属性。

//Get the Class object of the Person class Class clazz=Class.forName('reflection.Person') //Get all method information of the Person class Method[] method=clazz.getDeclaredMethods() for(Method m:method){ System.out.println(m.toString()) } //Get all member attribute information of the Person class Field[] field=clazz.getDeclaredFields() for(Field f:field){ System.out.println(f.toString()) } //Get all the construction method information of the Person class Constructor[] constructor=clazz.getDeclaredConstructors() for(Constructor c:constructor){ System.out.println(c.toString()) }

11.リフレクションを使用してオブジェクトインスタンスを動的に作成します

クラス の目的語 newInstance()

  1. ClassオブジェクトのnewInstance()メソッドを使用して、Classオブジェクトの対応するクラスのインスタンスを作成しますが、このメソッドには

このClassオブジェクトに対応するクラスには、デフォルトの空のコンストラクターがあります。

転送 ビルダー の目的語 newInstance()

  1. 最初にClassオブジェクトを使用して、指定されたコンストラクターオブジェクトを取得してから、コンストラクターオブジェクトのnewInstance()を呼び出します。

Classオブジェクトの対応するクラスのインスタンスを作成するメソッド。このメソッドを使用して、インスタンスを作成するための構築メソッドを選択できます。

//Get the Class object of the Person class Class clazz=Class.forName('reflection.Person') //Use the .newInstane method to create an object Person p=(Person) clazz.newInstance() //Get the constructor and create the object Constructor c=clazz.getDeclaredConstructor(String.class,String.class,int.class) //Create object and set properties 13/04/2018 Person p1=(Person) c.newInstance('Li Si','male',20)

tance()

//コンストラクターを取得してオブジェクトを作成します

コンストラクターc = clazz.getDeclaredConstructor(String.class、String.class、int.class)

//オブジェクトを作成してプロパティを設定します13/04/2018

Person p1 =(Person)c.newInstance( 'Li Si'、 'Male'、20)

## In addition, I have also compiled an interview e-book with 300 pages! The directory is as follows ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vZHVjaGFvY2hlbi9weXRob25ub3RlL3Jhdy9tYXN0ZXIvaW1nLyVFNyU5QiVBRSVFNSVCRCU5NS5wbmc?x-oss-process=image/format,png) It took almost half a month to organize it into a book. In addition, I created an introductory group that everyone cares about. It has been very popular since its establishment! There are currently many headhunters and HRs from major Internet companies in the group, most of them are from Beijing, Shanghai, Guangzhou, Shenzhen, and Hangzhou. I hope I can help you! **Give me a thumbs-up, so that more people can read this article, and inspire me by the way, hehe. ** >The author is concise Author: Hello everyone, I am a commander, as always, for the majority of Java reader dedication MySQL, SSM, Redis, Spring, and compiled a 300 [Java interview Manual] (https://urlify.cn/riQF3y), [personal blog ](https://imgconvert.csdnimg.cn/aHR0cHM6Ly93d3cueWNiYnMudmlwLw?x-oss-process=image/format,png) All are Java, distributed, big data series articles. Reprinting instructions: Reprinting is prohibited without authorization