黑马程序员技术交流社区

标题: 反射 [打印本页]

作者: 邝雄伟    时间: 2013-1-13 16:17
标题: 反射
看到反射中的视频,
System.out.println(int.class ==Integer.class);
Integer.class 我能理解,Integer是基本数据类型的封装类,他用到反射时会产生自己的一份字节码,
但是,int只是一个基本数据类型又不是一个类,int.class 怎么去理解?
他的这份字节码是如何产生的?
在Integer中可以使用字段,Integer.TYPE返回int的Class实例,也就是int.class ,这里的int.class,,Integer.class两者的关系是怎么样?


作者: 汪叶庭    时间: 2013-1-13 21:35
      int.class是Class对象的引用,严格来说是原始类型int的Class对象引用。举一个简单的例子,假设你自己建立了一个Dog类,那么Dog.class就是Dog类型的Class对象引用。每一个类加载之后,类加载器会给建立Class对象,你可以用Class.forName()方法取得该对象的引用,比如,Class<Dog> d = Class.forName("Dog");其中d就是Dog的Class对象的引用。同时,你也可以用Class<Dog> d = Dog.class;来获取Dog的Class对象的引用。其实Dog.class本身就是引用。
    int.class是int类型的Class对象引用。int类型是原始类型,JVM运行时,int类型Class对象已经建立,那么如何获取该对象的引用呢?就是用int.class。另外一种方法是用Integer.TYPE静态成员变量来获取。
    二者的区别:int.class是一个引用,注意是一个引用,而不是类;Integer是int类型的包装类,注意是一个类,而不是引用。
作者: 李宁    时间: 2013-1-13 22:08
int.class就是表示int类型的Class对象
每个类型都有一个自己类型的Class对象,API中java.lang.Class<T>类的描述中有说明。int.class编译时产生的。
int.class是基本类型的字节码,Integer.class是int封装类的字节码。




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