一、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();
		
	}

}