1.反射とは何ですか?長所と短所は何ですか?
リフレクションは、オブジェクトを動的にロードされ、オブジェクトが分析すること。運転状態では、任意のクラスのために、彼らは、このクラスのすべてのプロパティとメソッドに知られて作られています。任意のオブジェクトには、そのメソッドを呼び出すことができます。情報と動的呼び出しオブジェクトメソッドへのこのダイナミックアクセスは、javaの反射機構と呼ばれる機能。
長所:反射オブジェクトを動的に作成し、コンパイルし、ジャワの柔軟性を最大限にすることができます。
短所:パフォーマンスへの影響。基本的に反射解説操作で、JVMが何をすべきかを教え、私たちのニーズを満たすため、このような操作は、Javaコードを直接実行よりも常に遅いです。
2、どのようにリフレクションを使用するには?
A:完全修飾クラス名でオブジェクトを作成します。
Class<?> clz = Class.forname("全限类名");
Class<?> clz = A.class;
Class<?> clz = b.getClass();
B:コンストラクタオブジェクトを取得し、新しいオブジェクトのコンストラクタ
Constructor<?> cons = clz.getConstructor([参数类型class]);
cons.newInstance([参数]);
C:(引数なしで同等の新しいクラス名()コンストラクタ)によってオブジェクトクラスのインスタンスを作成します
clz.newInstance();
D:オブジェクトのクラスによって得られたオブジェクトのプロパティ
Field[] fields = clz .getFields();//获得某个类的所有的公共(public)的字段,包括父类中的字段。
Field[] fields = clz .getDeclaredFields();//获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段
Eは:オブジェクト・クラスのオブジェクトの方法により得られます
Method m = clz.getMethod("方法名",参数class);//只能获取公共的
Method M = clz.getDeclaredMethod("方法名",参数class)//获取任意修饰的方法,不能执行私有
m.setAccessible(true);//让私有的方法可以执行
F:実行方法みよう
m.invoke(obj实例对象,obj可变参数)