java反射深入理解

示例:

class A {

int i = 10;

public A(){

System.out.println("AAAAAAAAAA");

}

public void show(){

System.out.println(i);

}

static {

System.out.println("aaaaaa");

}

}

调用上面的例子

public class MyTest {

public static void main(Strng args[]){

A a = new A();

}

}

这样程序会先打印小a,再打印大A,是因为静态语句块早于构造方法初始化。这是题外话,下面将讨论反射的好处

public class Dialo {
   public static void main(String args[]){
        String choice = "Deluyi";
   }
    try{
        Class c = Class.forName(choice);
         object o = c.newInstance();
         Method m = c.getMethod("kill");
         m.invoke(o);
    }catch(Exception e){

         e.printStackTrace();
    }
}
改变choice的值就可以反射到对应的类上,在此若不用Class.forName(),那么只能用if else来控制进行new不同的对象(对象都实现同一接口,接口中有一方法名是kill),
相比之下,Class.forName具有更大的灵活性
上面的例子中,我们亦可给方法传参数,假设方法的参数一个是int,一个是String,那么
Method m = c.getMethod("kill",int.class,String.class);
m.invoke(o,10,"aa");
为了编程灵活性,int.class是Java语言支持的
Class对象还提供了方法和成员变量的列表,这就意味着我们得到了一个类,在完全不了解的情况下,可以用程序探测出来这个类的成员方法及成员变量,甚至能够调用这些成员方法,我们称这个能力为反射,反射本质就是看透Java的一种能力。





你可能感兴趣的:(JAVA)