JAva反射メカニズムの簡単な紹介
2248 ワード
1.バイトコード.バイトコードとはjava仮想マシンがクラスのオブジェクトをロードする場合、まずハードディスク(HDD)のソースコードをclassファイルのバイナリコード(バイトコード)にコンパイルし、classファイルのバイトコードをメモリにロードしてからクラスのオブジェクトを作成することです.
2.java反射の基礎はClassクラス(小文字のclassではないことに注意)であり、Classクラスインスタンスはメモリ内のバイトコードを表している.クラスオブジェクトを取得する一般的な方法としては、次のような方法があります(1つ目はオブジェクトの方法、もう1つはクラスの方法).
3.
反射のコンストラクション関数の取得
.クラスのオブジェクトを取得するには、クラスの構造関数を取得します.ここでは、クラスのgetConstructorメソッドを主に使用します.たとえば、次のようになります.
4.反射されたフィールドを取得します.
5.反射を取得する方法.
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));
}