第一问:
在利用反射调用对象方法的时候有没有生成这个类的对象。
例: Class cUser = User.class; 
     Method m1 = cUser .getDeclaredMethod("test"); 
     m1.invoke(foo); 第二问:
在如下代码中,两种方式对于执行效率来说是一样的么?
1. Class cUser = User.class;
2. User user = new User();
   Class cUser = user.getClass();
-----上面两种获得CLASS的方式不一样,下面继续------------------
     Method m1 = cUser .getDeclaredMethod("test"); 
     m1.invoke(foo); 

解决方案 »

  1.   

    对象我想是有的,只是这样在执行的时候才生成的,这里不存在该对象的引用,我们不能通过该对象的引用来操作该对象的方法。一切都是动态的吧,
    获取class有三种方法,还有一种如class.forName("java.io.FileInputStream");
      

  2.   

    相对于new来说,反射的效率低很多
      

  3.   


    生成方法是其次,我主要关心的是通过类直接得到CLASS和通过对象得到CLASS来进行反射操作的效率是不是一样。换种说法就是:第一种方式应该是每次都开辟新的内存,第二种方式会不会每次都用 new User()时产生的内存而不是每次也开辟新内存
    当然,new User()后的对象我是存起来了,并不会像例子中表现的那样每次反射前都新NEW
      

  4.   


    嗯,低是肯定的。但是有些时候牺牲一些效率也还是必要的。就目前那么多的JAVA框架来说,都得用到反射技术,要不然很多功能实现不了。
      

  5.   

    彻底理解错了。。
    得到CLASS的方式跟我后面的疑问根本就没有关系。
    因为在调用Method对象的invoke(?)方法时,是要传对象实例进去的。因为CLASS本身相当于模板,只是一个定义,通过这个定义可以找到调用的方式。
    而对象是按模板(指CLASS)定义开辟的内存空间,所以在invoke方法调用时还是要给出对象的引用(内存地址)才能完成操作没细看调用方式就在这发问,惭愧啊~~~