反射の基礎(一):クラスのロード
反射の本質:クラスの様々な属性(クラスの変数、クラスの方法、クラスが存在するパッケージ名、クラスのコンストラクタなど)を対応するjavaクラスにマッピングします.「クラスのグループ」でクラスを記述し、操作します.
反射を学ぶ最初の構文はクラスのロードです.
クラスの説明について:クラスはオブジェクトインスタンスの抽象とテンプレートです.人間を記述するクラスを定義すると、オブジェクト張三は人間のインスタンスであり、オブジェクト李四も人間のインスタンスである.
クラスのバイトコードロードは、オブジェクト張三またはオブジェクト李四から人の情報を得たり、人のクラスを定義したりして人の情報を得たりすることに相当する.
一種類の3種類のロード方式String.classとstr.getClass()とClass.forName(java.lang.String)は、Stringクラスのバイトコードを返します.
1つ目と2つ目の方法は、既存のオブジェクトタイプによってクラスのバイトコードロードを得ることである.
3つ目の方法は動的クラスロード方式であり,使用時にClassNotFoundException異常を処理する必要がある.この例では、例外を例コードでコンパクトに投げ出します.
二九種類の基本タイプ(void byte short int long float double boolean char)にも、voidのようなクラスのロードがある.class int.classはいずれも基本タイプに属し、
Integerである.classは基本タイプではありません.
3 int.classとInteger.classは同類のバイトコードをロードしていますが、int.classとIntegerです.TYPEは同じです.
四数組の判断文法はint[].class.isArray().
まとめ:コードに現れるタイプであれば、それぞれのclassインスタンスオブジェクトがあります.
コードの例は以下の通りである:
次の章
http://lgywindows.iteye.com/blog/1797303
反射を学ぶ最初の構文はクラスのロードです.
クラスの説明について:クラスはオブジェクトインスタンスの抽象とテンプレートです.人間を記述するクラスを定義すると、オブジェクト張三は人間のインスタンスであり、オブジェクト李四も人間のインスタンスである.
クラスのバイトコードロードは、オブジェクト張三またはオブジェクト李四から人の情報を得たり、人のクラスを定義したりして人の情報を得たりすることに相当する.
一種類の3種類のロード方式String.classとstr.getClass()とClass.forName(java.lang.String)は、Stringクラスのバイトコードを返します.
1つ目と2つ目の方法は、既存のオブジェクトタイプによってクラスのバイトコードロードを得ることである.
3つ目の方法は動的クラスロード方式であり,使用時にClassNotFoundException異常を処理する必要がある.この例では、例外を例コードでコンパクトに投げ出します.
二九種類の基本タイプ(void byte short int long float double boolean char)にも、voidのようなクラスのロードがある.class int.classはいずれも基本タイプに属し、
Integerである.classは基本タイプではありません.
3 int.classとInteger.classは同類のバイトコードをロードしていますが、int.classとIntegerです.TYPEは同じです.
四数組の判断文法はint[].class.isArray().
まとめ:コードに現れるタイプであれば、それぞれのclassインスタンスオブジェクトがあります.
コードの例は以下の通りである:
public class MyClass {
public static void main(String[] args) throws Exception {
String str = "abc";
//
Class cls1 = String.class;
Class cls2 = str.getClass();
Class cls3 = Class.forName("java.lang.String");
System.out.println(" : 。 , , 。");
System.out.println(" ");
System.out.println("1 String.class str.getClass() Class.forName(\"java.lang.String\") String :"+((cls1 == cls2)&&(cls2 == cls3)));
// (void byte short int long float double boolean char)
System.out.println("2 void void.class:"+void.class.getName()+" int int.class:"+int.class.getName()+" :"+void.class.isPrimitive()+" Integer :"+Integer.class.isPrimitive());
System.out.println("3 int.class Integer.class :"+(int.class==Integer.class)+" int.class Integer.TYPE :"+(int.class==Integer.TYPE));
System.out.println("4 int[].class.isArray():"+int[].class.isArray());
System.out.println(" : , class ");
}
}
次の章
http://lgywindows.iteye.com/blog/1797303