第一问:
在利用反射调用对象方法的时候有没有生成这个类的对象。
例: 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);
在利用反射调用对象方法的时候有没有生成这个类的对象。
例: 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);
获取class有三种方法,还有一种如class.forName("java.io.FileInputStream");
生成方法是其次,我主要关心的是通过类直接得到CLASS和通过对象得到CLASS来进行反射操作的效率是不是一样。换种说法就是:第一种方式应该是每次都开辟新的内存,第二种方式会不会每次都用 new User()时产生的内存而不是每次也开辟新内存。
当然,new User()后的对象我是存起来了,并不会像例子中表现的那样每次反射前都新NEW
嗯,低是肯定的。但是有些时候牺牲一些效率也还是必要的。就目前那么多的JAVA框架来说,都得用到反射技术,要不然很多功能实现不了。
得到CLASS的方式跟我后面的疑问根本就没有关系。
因为在调用Method对象的invoke(?)方法时,是要传对象实例进去的。因为CLASS本身相当于模板,只是一个定义,通过这个定义可以找到调用的方式。
而对象是按模板(指CLASS)定义开辟的内存空间,所以在invoke方法调用时还是要给出对象的引用(内存地址)才能完成操作没细看调用方式就在这发问,惭愧啊~~~