关于 类.class 与对象.getClass() 以及 Class.forName("类名");

adrain_sengtang 2008-12-26 02:45:08
请问 :
有一个类A
Class cl=A.class;
jvm究竟在内存中做了什么 ?
而 对象.getClass() 以及 Class.forName("类名"); jvm 又做了什么 ?
...全文
265 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhr924 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jiangnaisong 的回复:]
引用楼主 adrain_sengtang 的帖子:
请问 :
有一个类A
Class cl=A.class;
jvm究竟在内存中做了什么 ?
而 对象.getClass() 以及 Class.forName("类名"); jvm 又做了什么 ?


答:
1)Class cl=A.class; JVM将使用类A的类装载器,将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作.返回类A的Class的对象
2)Class cl=对象引用o.getClass();返回引用o运行时真正所指的对象(因为:儿子对象的引用可能…
[/Quote]

高手
云上飞翔 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 adrain_sengtang 的帖子:]
请问 :
有一个类A
Class cl=A.class;
jvm究竟在内存中做了什么 ?
而 对象.getClass() 以及 Class.forName("类名"); jvm 又做了什么 ?
[/Quote]

答:
1)Class cl=A.class; JVM将使用类A的类装载器,将类A装入内存(前提是:类A还没有装入内存),对类A做类的初始化工作.返回类A的Class的对象
2)Class cl=对象引用o.getClass();返回引用o运行时真正所指的对象(因为:儿子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象
3)Class.forName("类名"); JAVA人都知道.装入类A,并做类的初始化.
gongfuliang 2008-12-26
  • 打赏
  • 举报
回复
getClass是获取对象的Class对象,

Class.forname是要求JVM查找并加载指定的类,JVM会执行该类的类域和静态代码段

二者还是有区别的哦
helei123a 2008-12-26
  • 打赏
  • 举报
回复
学习
树成 2008-12-26
  • 打赏
  • 举报
回复
前面两个放法就是获得一个Class类对象而已,没做什么;
Class.forName通过用户当前类加载器根据提供的类名加载类到虚拟机中,然后返回这个类的Class对象。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧