Java反射の簡単な使用
16511 ワード
Java反射反射技術を用いてすべての構造関数 を得る.
出力結果:
コメント:
getDeclaredConstructor()とgetConstructorの違い
getDeclaredConstructor(Class>...parameterType)このメソッドは、publicおよび非publicを含む指定されたパラメータタイプのすべてのコンストラクタを返します.privateプライベートも含まれます.getDeclaredConstructors()の戻り結果にはパラメータタイプのフィルタはありません.
getConstructor(Class>...parameterType)このメソッドは、上記のメソッドが結果を返すサブセットを返し、指定したパラメータタイプのアクセス権限がpublicであるコンストラクタのみを返します.getConstructors()の戻り結果もパラメータタイプのフィルタリングはありません.反射技術を利用してクラスを得るすべての方法
出力結果:反射技術を利用してクラスのすべてのフィールド を得る.
出力結果:反射呼び出しオブジェクトを利用するプライベートメソッド(不完全)
実行結果:
public class Test02 {
public static void main(String[] args) {
try {
Class clazz = Student.class;// class
String name = clazz.getName();// ( )
Constructor<?>[] constructors = clazz.getDeclaredConstructors();//
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
} catch (SecurityException e) {
e.printStackTrace();
}
}
}
出力結果:
public com.etime2.Student()
public com.etime2.Student(java.lang.String,java.lang.Integer,java.lang.String)
コメント:
getDeclaredConstructor()とgetConstructorの違い
getDeclaredConstructor(Class>...parameterType)このメソッドは、publicおよび非publicを含む指定されたパラメータタイプのすべてのコンストラクタを返します.privateプライベートも含まれます.getDeclaredConstructors()の戻り結果にはパラメータタイプのフィルタはありません.
getConstructor(Class>...parameterType)このメソッドは、上記のメソッドが結果を返すサブセットを返し、指定したパラメータタイプのアクセス権限がpublicであるコンストラクタのみを返します.getConstructors()の戻り結果もパラメータタイプのフィルタリングはありません.
public class Test03 {
public static void main(String[] args) {
try {
Class clazz = Class.forName("com.etime2.Student");// class ( , class )
Method[] Methods = clazz.getDeclaredMethods();// ,
for (Method method : Methods) {
String name = method.getName();// ( )
System.out.println(name);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
出力結果:
getName
setName
sleep
getGender
getAge
setAge
setGender
public class Test04 {
public static void main(String[] args) {
try {
Class clazz = Class.forName("com.etime2.Student");
Field[] fields = clazz.getDeclaredFields();//
for (Field field : fields) {
System.out.println(" :" + field);
String name = field.getName();// ( )
System.out.println(" :" + name);
Class<?> type = field.getType();//
System.out.println(" :" + type);
int modifiers = field.getModifiers();//
boolean public1 = Modifier.isPublic(modifiers);
boolean static1 = Modifier.isStatic(modifiers);
boolean final1 = Modifier.isFinal(modifiers);
System.out.println("public1=" + public1 + " static1=" + static1 + " final1=" + final1);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
出力結果:
:private java.lang.String com.etime2.Student.name
:name
:class java.lang.String
public1=false static1=false final1=false
:private java.lang.Integer com.etime2.Student.age
:age
:class java.lang.Integer
public1=false static1=false final1=false
:private java.lang.String com.etime2.Student.gender
:gender
:class java.lang.String
public1=false static1=false final1=false
public class Test05 {
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("com.etime2.Student");
Method method = clazz.getDeclaredMethod("sleep");
method.setAccessible(true);//
Object newInstance = clazz.newInstance();//
Student student = (Student) newInstance;
Object invoke = method.invoke(student);
System.out.println(invoke);
} catch (Exception e) {
e.printStackTrace();
}
}
}
実行結果:
!
null