JAva反射メカニズムの簡単な紹介


1.バイトコード.バイトコードとはjava仮想マシンがクラスのオブジェクトをロードする場合、まずハードディスク(HDD)のソースコードをclassファイルのバイナリコード(バイトコード)にコンパイルし、classファイルのバイトコードをメモリにロードしてからクラスのオブジェクトを作成することです.
2.java反射の基礎はClassクラス(小文字のclassではないことに注意)であり、Classクラスインスタンスはメモリ内のバイトコードを表している.クラスオブジェクトを取得する一般的な方法としては、次のような方法があります(1つ目はオブジェクトの方法、もう1つはクラスの方法).
Dog dog = new Dog();
Class dogClass = dog.getClass();
Class dogClass = Class.forName("Dog");
Class dogClass = Dog.class;

3.
反射のコンストラクション関数の取得
.クラスのオブジェクトを取得するには、クラスの構造関数を取得します.ここでは、クラスのgetConstructorメソッドを主に使用します.たとえば、次のようになります.
		// StringBuffer String 
		String str1 = new String(new StringBuffer("hello"));
		// String 
		Constructor c1 = String.class.getConstructor(StringBuffer.class);
		// , ( StringBuffer.class) 
		String str2 = (String)c1.newInstance(new String("world"));
		// 
		String str3 = (String)c1.newInstance(new StringBuffer("world"));
		System.out.println(str3);

4.反射されたフィールドを取得します.
import java.lang.reflect.Field;

class Point{
	public int x;// public
	private int y;// private
	Point(int x,int y){
		this.x = x;
		this.y = y;
	}
}

public class ReflectTest {

	public static void main(String[] args) throws Exception {
		Point p = new Point(2,3);
		//getField public 
		Field fieldX = p.getClass().getField("x");
		// x 
		System.out.println(fieldX.get(p));
		//getDeclaredField 
		Field fieldY = p.getClass().getDeclaredField("y");
		// y 
		fieldY.setAccessible(true);
		System.out.println(fieldY.get(p));		
	}

}

5.反射を取得する方法.
	public static void main(String[] args) throws Exception {
		String s1 = "hello";
		// , ( )
		Method m = s1.getClass().getMethod("charAt", int.class);
		// , 。 null, 
		System.out.println(m.invoke(s1, 1));
	}