JAva-反射

1210 ワード

1.概要反射APIはプログラムの実行時の内部構造を取得することができ、反射APIが提供する動的エージェントは非常に強力な機能であり、AOP中の方法ブロック機能を原生的に実現することができ、反射APIはJavaクラスの水中でのバックグラウンドを見ているようで、Javaクラスの内部構造を知っていれば、それらと対話することができ、オブジェクトの作成、オブジェクトの呼び出し方法を含む.ソースコードでの直接的なインタラクションと同じですが、実行時の柔軟性が追加されていますが、反射の最大の弊害は性能が悪いことです.同じ操作で、反射APIを使うのにかかる時間は直接使用するよりも1、2桁遅いかもしれませんが、現在のJVM実装ではjava反射の性能が大幅に向上しています.柔軟性とパフォーマンスの両立
2.基本用法反射APIの第一の主要な役割はプログラムの実行時に内部構造を取得することであり、一つのJavaクラスの中のすべての内部構造を遍歴することができる.反射APIのもう一つの強大な機能は実行時にjavaオブジェクトを操作することであり、動的にjavaクラスオブジェクトを作成し、各ドメインの値を取得し、ある方法を呼び出すことを含む.
class MyClass{
    public int count;
    public MyClass(int start){
        count = start;
    }

    public void increase(int step){
        count += step;
    }
}

MyClass myClass = new MyClass(0);
myClass.increase(2);
System.out.println(myClass.count);


try{
    Constructor construtor = MyClass.class.getConstructor(int.class);
    MyClass myClassReflect = construtor.newInstance(10);

    Method method = MyClass.class.getMethod("increase",int.class);
    method.invoke(myClassReflect ,5);

    Field field = MyClass.class.getField("count");
    System.out.println(field.getInt(myClassReflect ));
}catch(Exception e){
    e.printStackTrace();
}