package reflect;
/**
* 对反射的测试 需要类java.lang.reflect.*;的包的导入 其次看Class和Method类的运用
* 重点:1.Class c=Class.forName("text.Student");//相当于单子模式,只有对外的一个窗口forName()
来创建对象
* 2.Method met=c.getMethod("Read");//method 只支持公共的方法
* 3.Object ocd=met.invoke(obj1,null);//Object返回为方法的返回对象
* 注意:Method 创建其对象时用 Class.getMethod("调用类中的方法名",方法中的参数类型)生成的
Method对象
* 因为getMethod()支持的是Class类型,所以用Class[] a=new Class[];来创建对象(具体参照
method2.java注释讲解)
* 再就是运用 Method中的invoke方法 同理需要的是Object型的
* @author Alex
*/
//import java.lang.*;
import java.lang.reflect.*;
import text.HighStudent;
public class Refl{
public static void main(String args[]){
try{
//
//Class q=Class.forName("java.lang.String");
//Class c=String.class("java.lang.String");
/* Class c=Class.forName("text.Student");//父类
Class e=Class.forName("text.HighStudent");//子类,但不能调用父类中的方法
Method m[]=c.getDeclaredMethods();//获得类中的各种各样的方法
*/
/*String s="abc";
Class b=(Class)q.newInstance();//newInstance(s);
Method a=q.getMethod("subString");
Object j=a.invoke(q,s);
String h=j.toString();*/
/* //父类中的方法调出
for(int i=0;i<m.length;i++)
System.out.println(m[i].toString());
System.out.println("/n");
//字类中的方法调出
Method n[]=e.getDeclaredMethods();
for(int i=0;i<n.length;i++)
System.out.println(n[i].toString());*/
Class c=Class.forName("text.Student");//相当于单子模式,只有对外的一个窗口
forName()来创建对象
// Class arg[]=new Class[2];
// arg[0]=Integer.TYPE;
Method met=c.getMethod("Read");//method 只支持公共的方法
// Object[] obj=new Object[2];
// obj[0]=new Integer(1);
//Object obj=new Student();
Student obj1=new HighStudent();//创建调用对象的实例,因为父类为抽象类,所以只
能通过子类访问
//1. Student obj1=new HighStudent();
HighStudent obj2=new HighStudent();//2.HighStudent obj2=new HighStudent();
Object ocd=met.invoke(obj1,null);//Object返回为方法的返回对象
//String ocd1=met.invoke(obj1, null);//方法返回的对象名义上说是方法的返回值,
但只强调有无返回
//其实返回Object型
System.out.println(ocd);
}catch(Throwable e){
System.err.println(e);
}}}