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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黎志文 中级黑马   /  2013-5-29 14:19  /  2559 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.这两个内存区域分别用来存储什么东西?

2.非静态成员变量和静态成员变量分别存储在哪?非静态方法和静态方法又存储在哪?

3.静态代码块,静态成员变量,构造代码块,构造函数这四个内容在内存里面执行的先后顺序是什么?

这两天被这几个问题搞得头大?恳请大神指教,谢谢了!

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

6 个回复

倒序浏览
1、堆内存主要是存放用new产生的数据 ;方法区存放static修饰的方法,对象
2、非静态成员变量,其中变量名(引用变量)存放在栈内存,其实际数据在堆内存中,引用变量指向这些实际数据的地址池;静态成员变量存放在方法区;静态方法也存放在方法区,非静态方法其实和非静态成员变量一样;
3、 顺序是,静态代码块,构造代码块,构造函数

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
喜欢流浪 发表于 2013-5-29 14:41
1、堆内存主要是存放用new产生的数据 ;方法区存放static修饰的方法,对象
2、非静态成员变量,其中变量名 ...

那静态成员是随着类的加载而加载么?静态成员和静态代码块执行的先后顺序又是怎样的?
回复 使用道具 举报
黎志文 发表于 2013-5-29 15:05
那静态成员是随着类的加载而加载么?静态成员和静态代码块执行的先后顺序又是怎样的? ...

静态成员先执行,因为静态代码块中有可能要引用静态成员变量。
回复 使用道具 举报
黎志文 发表于 2013-5-29 15:05
那静态成员是随着类的加载而加载么?静态成员和静态代码块执行的先后顺序又是怎样的? ...

已经有人回答了  我就不便回答了!
回复 使用道具 举报
黑马-许鹏 发表于 2013-5-29 15:30
静态成员先执行,因为静态代码块中有可能要引用静态成员变量。

既然是静态成员先执行,那为何我这样写:
static
{
      System.out.println("我是静态代码块"+country);
}
static String country = "china";
     系统会报错“错误: 非法前向引用”,按照你的逻辑,静态成员先执行,那么我这两个代码的先后顺序就没有关系,因为静态成员已经执行了,那么静态代码块写在前面,仍然是可以调用country的,可实际结果却并非如此,静态代码块写在country前面系统会报错。
   会不会是这样,静态代码块和静态成员变量是相同级别,但是按它们的先后顺序来执行??
回复 使用道具 举报
这种概念问题我最怕了,参考楼上的回答吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马