public class Test
{
private static int sid = 0;
private static int x = print("this is static variable x");
private int id;
Test(int _id)
{
id = _id;
}
void PRINT()
{
System.out.println("sid: "+sid+"id"+id);
}
public static int print(String s)
{
System.out.println(s);
return 20;
}
public static void main(String args[])
{
System.out.println("this is main");
Test test = new Test(5);
test.PRINT();
}
}
通过这个简单的例子来回顾一下内存分配。
java中内存主要包含4块:
heap(堆内存):除了基本类型的值,其他被new出来的变量都存储在这里。
stack(栈内存):局部方法定义的变量都存储在这里。方法作用域结束,变量之后会被垃圾收集机制搞定。
data segment:静态变量或是常量存放区。
codesegment(方法区):存放方法。
刚才又查了查资料,发现这里面还有一些不知道知识。
静态成员变量和静态代码块与main函数的执行先后顺序是什么?
为此将代码改成如此。
执行的结果是:
this is static variable x
this is main
sid: 0 id: 5
用下图来说明内存分配过程:
1:①②③④⑤这几个在main方法执行前已经预加载好了(它们之间的顺序我还没搞懂)。
2:执行了静态方法print。打印出this is static variable x。
3:main方法执行,打印出this is main。
4:在stack分配test存储空间,为构造方法在stack中分配临时变量空间(构造方法结束,便消失),完成对象初始化。
5:接着调用PRINT方法,打印。
网友评论