黑马程序员技术交流社区

标题: 反射里的问题 [打印本页]

作者: 创出一片辉煌    时间: 2012-8-4 12:44
标题: 反射里的问题
反射里的问题,例
Method  met = value.getMethod("GOGO",String.class,int.class) ;
public Method getMethod(String name,
                        Class<?>... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException

,老师说取得反射有  三种方法,其中一种是  类.class  里面,但是上面的程序,却是int.class  而不是Integer.class 为什么呢,我知道应该是Integer.TYPE = int.class
作者: 林康春    时间: 2012-8-4 13:10
1 不是说取得反射,而是说取得类字节码有3种方法:注意:是类
   得到字节码: 类名.class      对象.getClass()   Class.forName("类名")
   另外,取得基本类型的字节码
               Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE,
                Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE
                其中void比较特殊

2  你看一下下面的代码
                String str = "abc";
                Class c1 = str.getClass()//得到字节码;
                Class c2 =String.class;//得到字节码
                Class c3 =Class.forName("java.lang.String");//得到字节码
                c1==c2==c3
                System.out.println(c1.isPrimitive());//不是基本类型
                System.out.println(int.class.isPrimitive());//基本类型
                System.out.println(int.class==Integer.class);//两种不同类型的字节码
                System.out.println(int.class==Integer.TYPE);//同类型的字节码

   注意: int.class==Integer.TYPE  这里是true的
          int.class是基本类型的字节码  Integer.TYPE也是基本类型的字节码

   所以,你说的“ 。。。 而不是Integer.class 为什么呢”,可以说是int.class 也可以是Integer.class
作者: 胡文凡    时间: 2012-8-4 13:16
Method  met = value.getMethod("GOGO",String.class,int.class)
因为met里需要的参数是(,String,int)所以使用int.class啊。Integer.class与int.class又不同,为什么要用 Integer.class。需要什么类型的参数就用什么类型的.class。至于你说的什么类.class这里是特殊情况,null.class都可以,null明显不是一个类但是它也有字节码的。基本数据类型也对应了其相应的字节码。  




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