黑马程序员技术交流社区

标题: getClass方法和Class.forName方法有什么不同 [打印本页]

作者: wangpan    时间: 2013-6-21 18:50
标题: getClass方法和Class.forName方法有什么不同
本帖最后由 孙百鑫 于 2013-6-27 07:43 编辑

如题,这两个方法都可以获取一个Class 对象,有什么区别?
作者: 万琪    时间: 2013-6-21 18:56
getNamepublic String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 如果此类对象表示的是非数组类型的引用类型,则返回该类的二进制名称,Java Language Specification, Second Edition 对此作了详细说明。
如果此类对象表示一个基本类型或 void,则返回的名字是一个与该基本类型或 void 所对应的 Java 语言关键字相同的 String。
如果此类对象表示一个数组类,则名字的内部形式为:表示该数组嵌套深度的一个或多个 '[' 字符加元素类型名。元素类型名的编码如下:
Element Type Encoding
boolean
Z
byte
B
char
C
class or interface
Lclassname;
double
D
float
F
int
I
long
J
short
S
类或接口名 classname 是上面指定类的二进制名称。
示例:
String.class.getName()     returns "java.lang.String" byte.class.getName()     returns "byte" (new Object[3]).getClass().getName()     returns "[Ljava.lang.Object;" (new int[3][4][5][6][7][8][9]).getClass().getName()     returns "[[[[[[[I"

返回:此对象所表示的类或接口名。getClasspublic final Class<?> getClass()返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。 实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。 例如,以下代码片段中不需要强制转换:
Number n = 0;
Class<? extends Number> c = n.getClass();


返回:表示此对象运行时类的 Class 对象。另请参见:The Java Language Specification, Third Edition (15.8.2 Class Literals)

作者: 浩临天下    时间: 2013-6-21 19:07
一个java.lang.Class对象代表了Java应用程序在运行时所加载的类或接口实例,也就是说被加载的类在JVM中以Class的实例存在,Class对象由JVM自动产生。通过Object的getClass()方法来获取每一个对象对应的Class对象,或的Class对象之后可以用Class对象上的方法取得类的信息。
作者: wangpan    时间: 2013-6-21 19:13
浩临天下 发表于 2013-6-21 19:07
一个java.lang.Class对象代表了Java应用程序在运行时所加载的类或接口实例,也就是说被加载的类在JVM中以Cl ...

谢谢你的解答哦!我问的是,什么情况下使用Object的getClass()方法?什么情况下使用Class.forName方法?因为它们获得的都是Class对象
作者: wangpan    时间: 2013-6-21 19:14
万琪 发表于 2013-6-21 18:56
getNamepublic String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本 ...

谢谢你的解答哦!我问的是,什么情况下使用Object的getClass()方法?什么情况下使用Class.forName方法?因为它们获得的都是Class对象
作者: 浩临天下    时间: 2013-6-21 19:33
wangpan 发表于 2013-6-21 19:14
谢谢你的解答哦!我问的是,什么情况下使用Object的getClass()方法?什么情况下使用Class.forName方法? ...

通过每个对象都具备的方法getClass来获取。必须要创建该类对象,才可以调用getClass方法。
使用的Class类中的方法,静态的forName方法。指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可。
作者: HM朱蛟    时间: 2013-6-26 04:56
getClass()是用于对象     Class.forName用于获取一个类的字节码,可以参考张老师讲"方法反射"那一集"调用其他类中的main方法"中有用到class.forName
作者: 孙百鑫    时间: 2013-6-27 07:43
楼主您好。我已将您的帖子改成已解决。如果帖子发布长时间没加分。及时联系我。以免漏分的情况发生{:soso_e100:}
作者: wangpan    时间: 2013-6-27 10:02
孙百鑫 发表于 2013-6-27 07:43
楼主您好。我已将您的帖子改成已解决。如果帖子发布长时间没加分。及时联系我。以免漏分的情况发生{:soso_e ...

好的,谢谢~




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