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的一种能力。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值