您的位置:首页 > 编程语言 > Java开发

java反射深入理解

2015-10-21 09:04 423 查看
示例: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的一种能力。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: