A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢毅 中级黑马   /  2013-1-29 22:08  /  1313 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-31 22:01 编辑

毕老师说过,一个类的静态成员和非静态方法都是随着类的加载而加载到方法区的,那么照理说mian方法也会到方法区,那么在new对象的时候,main方法是最先被加载到方法区然后马上在栈内存中调用它在方法区的地址么。。。。这里没弄明白,希望高手指教。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

2 个回复

倒序浏览
Person p=new Person("zhangsan",20);
该句话所做的事情:
1.在栈内存中,开辟main函数的空间,建立main函数的变量 p。
2.加载类文件:因为new要用到Person.class,所以要先从硬盘中找到Person.class类文件,并加载到内存中。
加载类文件时,除了非静态成员变量(对象的特有属性)不会被加载,其它的都会被加载。
记住:加载,是将类文件中的一行行内容存放到了内存当中,并不会执行任何语句。---->加载时期,即使有输出语句也不会执行。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
呵呵,我说下我的理解,main方法是一个程序的入口,也就是说程序一执行就会先调用它,是吧,而其实程序是在编译的时候就把它所需要的数据全部加载到了class文件中的,而程序最后都是一条指令一条指令的执行,而main函数又要最先执行,所以我认为确实是先加载的main所在的类.也就是它所在的class文件.而new的对象其实是在编译的时候就加载到了这个类文件中的,所以我认为可以把它们理解成是一起加载到内存中的!

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马