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的一种能力。
相关文章推荐
- Spring MVC提供的表单标签
- 浅谈Java编程中的内存泄露情况
- Java IO和Java NIO在文件拷贝上的性能差异分析
- SpringMVC基于注解映射
- Mac下Java JDK的下载安装和配置
- SpringMVC访问资源文件
- java ==,hashCode(),equals(),
- SpringMVC前端控制器-----DispatcherServlet
- SpringMVC核心组件
- springMvc sitemesh freemarker 整合总结
- Java 中 Vector、ArrayList、List 使用深入剖析
- eclipse中运行wordcount任务后在hadoop0.20.2监控页面没有显示该job的问题
- eclipse 配置 maven
- Java-2048
- Java五子棋
- Java-类与对象
- Myeclipse Debug时 within the open projects in your workspace
- Shiro系列之Shiro+Spring MVC整合(Integration)
- eclipse 内部 mysql
- eclipse 配置 maven