关于类的加载机制问题!! 求解惑??

bama2008 2010-01-14 08:45:15
最近一直在为这个类的加载机制问题头疼,晕晕乎乎的,总是把理不清思路,在google上也看了不少关于类加载机制的问题。

但是觉的自己还是理解的有问题....

class test{
public static void main(String args[]) {
new B();
}
}

class A {

}

class B extends A {

}



当我们执行一个test.class文件 时, Bootsartclassloader会将ExtClassLoader和AppClassLoader load到jvm中

然后AppClassLoader将改.class文件load到jvm中,

文件从main方法开始执行当执行到new B();时 因为类B继承自A

所以在构造导出类的时候先的构造出基类,因此基类也就是类A首先被AppClassLoader到jvm中

可是我就是不能理解,AppClassLoader怎么知道类B继承自A 它应该对类B.class文件进行分析,看它继承自哪个类,然后先把被继承的那个类load到JVM中


今天早上去了可同学探讨, 他告诉我 其实load类不是我上面所理解的
说程序运行试回根据import导入到jvm 的code区域,当我们执行程序的时候相应的就code区域相应的.clss文件然后分配到对应的栈 堆 方法块中

按我同学说的就可以理解为什么会先加载父类了

也就是在new b()的时候 jvm会对B.class进行分析 当它发现extends关键字的时候 就会把A.class进行内存分配, 然后再对b进行分配


这个加载倒底是把本地的.class文件加载到jvm中 还是把jvm中的.class文件加载到相应的内存分配区域中??


现在很糊涂,希望csdn的朋友帮我解决一下这个困惑!!!谢谢了!!
...全文
56 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23,404

社区成员

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

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