一、JAVA反射メカニズム--入門編詳細
目次
一、JAVA反射メカニズムの基本概念
二、Classオブジェクトを取得する三つの方法
三、三方式コードの例
四、基礎文法--クラスメソッドと呼び出しを取得する
1、基本文法
2、パラメトリック関数の呼び出しと使用の有無
3、公共、私有、保護関数の取得と呼び出し
一、JAVA反射メカニズムの基本概念
反射:クラス内の情報を動的に取得し、そのメソッドを動的に呼び出します.クラスのプロファイリングに相当します.
反射メカニズム+プロファイルにより、アプリケーションの拡張性が向上します.結局、プロファイルに直面するのはソースコードに直面するよりずっと便利です.
二、Classオブジェクトを取得する三つの方法
1、ObjectクラスのgetClass()メソッドで--面倒くさい、あまり使わない.
2、静的属性による.classは、対応するClassオブジェクトを取得するために使用されます.クラスの静的プロパティが必要です.
3、指定されたクラスの文字列名--比較的よい.
三、三方式コードの例
まずクラスを作成しますが、クラスの属性や関数名など、クラスも普通のクラスに似ています.
次に簡単なテストを行い、3つの方法の違いに注意してください.最後の関数はクラス内の各関数を取得します.
package design;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner;
import ch11.Student;
public abstract class Main {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Student stu=new Student();
Class class1=stu.getClass();
System.out.println(class1);
System.out.println("-------------");
Class class2=Student.class;
System.out.println(class2);
System.out.println("-------------");
String className="ch13.Student";// +
Class> class3=Class.forName(className);
System.out.println(class3);
Method []MethodArray=class3.getMethods();
MethodArray=class3.getDeclaredMethods();
for(Method method:MethodArray)
{
System.out.println(method);//
}
Method method1=class3.getMethod("showInformation");
System.out.println(method1);
String className1="ch13.Main1";
Class>class4=Class.forName(className1);
Method method2=class4.getMethod("main", String[].class);
System.out.println(method2);
method2.invoke(null, (Object)new String[] {"a","b","c"});
}
}
、 --
1、
package design;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.Annotation;
import java.text.DateFormat.Field;
import java.util.Scanner;
import ch13.Student;
//import java.lang.reflect.Field;
public abstract class Main {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
String info="ch13.Student";
Class> class1=Class.forName(info);
System.out.println(class1);
//
String ClassName=class1.getName();
Sop(ClassName);
//
ClassName=class1.getSimpleName();
Sop(ClassName);
// 、 、
int mo=class1.getModifiers();
Sop(mo);
Sop(Modifier.isAbstract(mo));
Sop(Modifier.isStatic(mo));
Sop(Modifier.isPublic(mo));//...
//
Package pa=class1.getPackage();
Sop(pa);
//
Class cla=class1.getSuperclass();
Sop(cla.getName());
//
Class []intefaces=class1.getInterfaces();
//
Constructor []constructors=class1.getConstructors();
for(Constructor c2:constructors)
Sop(c2);
// public
Method []methods1=class1.getMethods();
for(Method c3:methods1)
Sop(c3);
//all
Method []methods2=class1.getDeclaredMethods();
for(Method c4:methods2)
Sop(c4);
//
java.lang.reflect.Field[]fields=class1.getDeclaredFields();
for(java.lang.reflect.Field c5:fields)
Sop(c5);
// --
java.lang.annotation.Annotation[] an=class1.getAnnotations();
for(java.lang.annotation.Annotation c6:an)
Sop(c6);
}
private static void Sop(Object className) {
// TODO Auto-generated method stub
System.out.println(className);
}
}
2、
package design;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.DateFormat.Field;
import java.util.Scanner;
import ch13.Student;
public abstract class Main {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
Student stu=new Student();
Class class1=stu.getClass();
System.out.println(class1);
System.out.println("-------------");
Class class2=Student.class;
System.out.println(class2);
System.out.println("-------------");
String className="ch13.Student";// +
Class> class3=Class.forName(className);
System.out.println(class3);
Method []MethodArray=class3.getMethods();
MethodArray=class3.getDeclaredMethods();
for(Method method:MethodArray)
{
System.out.println(method);//
}
Method method1=class3.getMethod("showInformation");
System.out.println(method1);
String className1="ch13.Main1";
Class>class4=Class.forName(className1);
Method method2=class4.getMethod("main", String[].class);
System.out.println(method2);
method2.invoke(null, (Object)new String[] {"a","b","c"});
//Class MyObjects=MyObject.class;
//Field
java.lang.reflect.Field[] field=class3.getDeclaredFields();
for(java.lang.reflect.Field f:field)
{
System.out.println(f);
}
/*
*
*/
System.out.println("-------- , !!");
MethodArray=class3.getMethods();
for(Method m:MethodArray)
System.out.println(m);
System.out.println("-------- , , !!");
Class>class5=Class.forName(className);
Constructor []cons=class5.getDeclaredConstructors();
for(Constructor c:cons)
{
System.out.println(c);
}
Constructor con=class5.getConstructor();
Object obj=con.newInstance();
System.out.println(obj);
Student stu1=(Student)obj;
stu1.showInformation();
System.out.println("-------- !!");
Constructor con1=class5.getConstructor(String.class,String.class,int.class);
Object obj1=con1.newInstance("niss","22",44);
Student stu2=(Student)obj1;
stu2.showInformation();
}
}
3、 、 、
package design;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.DateFormat.Field;
import java.util.Scanner;
import ch13.Student;
public abstract class Main {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
/*Student stu=new Student();
Class class1=stu.getClass();
System.out.println(class1);
System.out.println("-------------");
Class class2=Student.class;
System.out.println(class2);
System.out.println("-------------");
String className="ch13.Student";// +
Class> class3=Class.forName(className);
System.out.println(class3);
Method []MethodArray=class3.getMethods();
MethodArray=class3.getDeclaredMethods();
for(Method method:MethodArray)
{
System.out.println(method);//
}
Method method1=class3.getMethod("showInformation");
System.out.println(method1);
String className1="ch13.Main1";
Class>class4=Class.forName(className1);
Method method2=class4.getMethod("main", String[].class);
System.out.println(method2);
method2.invoke(null, (Object)new String[] {"a","b","c"});
//Class MyObjects=MyObject.class;
//Field
java.lang.reflect.Field[] field=class3.getDeclaredFields();
for(java.lang.reflect.Field f:field)
{
System.out.println(f);
}*/
/*
*
*/
String className="ch13.Student";// +
Class> class5=Class.forName(className);
System.out.println(class5);
Method []MethodArray=class5.getMethods();
System.out.println("-------------");
System.out.println("-------- , !!");
MethodArray=class5.getMethods();
for(Method m:MethodArray)
System.out.println(m);
System.out.println("-------- , !!");
Constructor []cons=class5.getDeclaredConstructors();
for(Constructor c:cons)
{
System.out.println(c);
}
Constructor con=class5.getConstructor();
Object obj=con.newInstance();
System.out.println(obj);
Student stu1=(Student)obj;
stu1.showInformation();
System.out.println("-------- !!");
Constructor con1=class5.getConstructor(String.class,String.class,int.class);
Object obj1=con1.newInstance("niss","22",44);
Student stu2=(Student)obj1;
stu2.showInformation();
System.out.println("-------- , !!");
Method m=class5.getMethod("setGrade", int.class);
System.out.println(" !!");
obj1=con1.newInstance("miss","22",44);
m.invoke(obj1, 100);
Student stu3=(Student)obj1;
stu3.showInformation();
System.out.println(" :"+m);
System.out.println(" --44-->100");
/*
* 、
*/
Method m1=class5.getDeclaredMethod("setName1", String.class);
System.out.println(m1);
m1.setAccessible(true);//
Object string =m1.invoke(obj1, " ");
System.out.println(string);
System.out.println(" ");
Method m2=class5.getDeclaredMethod("setName2", String.class);
//String.class
m2.setAccessible(true);
System.out.println(m2);
System.out.println(m2.invoke(obj1, " "));
Student stu4=(Student)obj1;
stu4.showInformation();
}
}