黑马程序员技术交流社区

标题: 反射生成的对象与实例化类生成的对象有什么区别 [打印本页]

作者: ⑷嚸V恱    时间: 2013-8-20 19:04
标题: 反射生成的对象与实例化类生成的对象有什么区别
下面代码,我既然能用反射生成类对象,为什么平时还用类实例化生成对象呢,求解
  1. public static void main(String[] args) {
  2.                         Test8 t2=new Test8();
  3.                         Test8 t = null;
  4.                         try {
  5.                                 t = Test8.class.newInstance();
  6.                         } catch (InstantiationException e) {
  7.                                 // TODO Auto-generated catch block
  8.                                 e.printStackTrace();
  9.                         } catch (IllegalAccessException e) {
  10.                                 // TODO Auto-generated catch block
  11.                                 e.printStackTrace();
  12.                         }
  13.                         System.out.println(t.toString());
  14.                         System.out.println(t2.toString());
  15.                
  16.         }
  17.         @Override
  18.         public String toString() {
  19.                 return "反射创建成功";
  20.         }
复制代码

作者: 流年追忆时    时间: 2013-8-20 19:45
效率问题吧,毕竟反射是在运行阶段又去解析它的字节码,就像你去摸索一个未知的事务似的,带来的开销必然大,个人的理解,哈哈
作者: 吃阁子的猫    时间: 2013-8-20 20:11
这是2个不同的概念,反射是在运行时期得到得到对象的属性,方法等,不用管对象的类型是什么,只要找到他们的属性方法就可以调用,降低了程序的耦合性,而实例化对象是通过编译器编译的
作者: 黑马伍哲沂    时间: 2013-8-20 21:27
反射是给做框架的人用的.
作者: straw    时间: 2013-8-20 21:52
本帖最后由 straw 于 2013-8-20 22:48 编辑

实现过程不一样,用途也是不一样.
反射实现过程是通过在内存中的字节码去创建对应该类的实例,这个对象也只能在内存中.这种方式的设计主要是用于框架开发使用的,易于扩展.
而用类去实例本类对象是程序在执行时才在内存堆中开闭空间并应用实例,这种方法和类来创建的性能上好像没什么差别吧!但是在原代码中使用是很方便的,缺陷就是没有像反射那样扩展性强.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2