黑马程序员技术交流社区

标题: 类名.class,对象名.getClass(),Class.forName("...")区别问题 [打印本页]

作者: 黄成超    时间: 2013-2-7 11:15
标题: 类名.class,对象名.getClass(),Class.forName("...")区别问题
任何合理存在的事物都有它存在的道理,"类名.class","对象名.getClass()","Class.forName("...")"是获取文件字节码的形式有三种,他们各有什么样特点,适用于哪些情况呢?那一种更好呢?

作者: 王少雷    时间: 2013-2-7 13:32
Class cl=A.class; JVM将使用类A的类装载器,将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作.返回类A的Class的对象
Class cl=对象引用o.getClass();返回引用o运行时真正所指的对象(因为:儿子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象
Class.forName("类名"); JAVA人都知道.装入类A,并做类的初始化.
在编译时不知道类名的情况:Class c = Class.forName("类名");
在编译期知道类名的情况:Class c = 类名.class ;或者 class c= Integer.TYPE;
在类的实例已经的得到的情况:Class才= 对象名.getClass();
作者: 刘军亭    时间: 2013-2-8 09:03
类名.class,扩展性不是很强,做反射用的话就没法用了,因为字节码对象没办法用一个变量得到,只能直接写出来,如String.class    Integer.class等。

对象名.getClass() ,适合你有要获得(字节码对象)的类的实例对象的情况下使用,如果要获得一个类的字节码对象,而且你有这个类的实例对象就可以直接写了。
                             必须有那个实例对象才行。


Class.forName("...")",扩展性强,可以接受传进来的字符串类名直接得某类的字节码对象,一般反射时候用到此类。





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