首先,说明一下,这些都是听了尚学堂的马士兵老师的课学到的.是一种很好的习惯.java执行过程的内存分配:
head(堆):存放动态创建的东西,new出来的东西.对象的实体.
stack(栈):存放局部变量,以及对象的引用值.
data segement(数据区):存放静态变量和字符串常量.
code segement(代码区):存放代码.分析过程:
首先,找main()方法.一句一句往下走,
每当创建一个对象,在stack创建一个引用值,在head创建一个实体.
每当创建一个局部变量,在stack创建一个变量.
每当一个方法完成.为这个方法在stack里创建的变量和引用都消亡.
每当一个对象实体(head中)没有任何引用指向它的时候,当下次垃圾收集机制运作的时候,自动回收内存.用这样的内存分析,解决初级的程序问题,个人觉得非常有助于学习.
head(堆):存放动态创建的东西,new出来的东西.对象的实体.
stack(栈):存放局部变量,以及对象的引用值.
data segement(数据区):存放静态变量和字符串常量.
code segement(代码区):存放代码.分析过程:
首先,找main()方法.一句一句往下走,
每当创建一个对象,在stack创建一个引用值,在head创建一个实体.
每当创建一个局部变量,在stack创建一个变量.
每当一个方法完成.为这个方法在stack里创建的变量和引用都消亡.
每当一个对象实体(head中)没有任何引用指向它的时候,当下次垃圾收集机制运作的时候,自动回收内存.用这样的内存分析,解决初级的程序问题,个人觉得非常有助于学习.
我就是个写java程序的,对我而言知道在java执行过程的内存分配规则以后。
在我写程序的时候,我应当注意些什么?
class Parent {
void m() {
System.out.println("parent");
}
}class Child extends Parent{
void m() {
System.out.println("child");
}
}public class Test {
public static void main(String[] args) {
Parent p = new Child();
p.m();/*这里打印出来的是child,因为在head中创建p的时候,
创建的是一个Child的实例,所以,在创建的时候m就被
重写了,这个时候的m指向的是重写后的m(),所以,打
印出来的是chld,希望可以对你理解多态有帮助.*/
}
}