创建对象的内存分析:
直接看代码:
这个是一个pet类
public class pet {
public String name;
public int age;
//默认有无参构造函数
public void shout(){
System.out.println("在大声的叫");
}
}
这个是一个调用pet的main方法:
public static void main(String[] args) {
pet cat = new pet();
cat.name="笨笨";
cat.age=12;
cat.shout();
System.out.println(cat.name);
System.out.println(cat.age);
pet dog=new pet();
}
如图下面是一个栈和堆的的内存地址分析图:
分析:
-
首先在创建一个是Demo,Demo类里面有main方法。
-
在new的时候,首先要加载Demo类里面的方法 也就是main方法,所以在栈的最底下是main方法,这样就会加载出pet方法里面的属性和方法。name age shout()
-
在栈里面会有一个cat的 引用变量名,栈指向堆 也就是指向 :0*001
默认的值都是 nam=null age=0
-
这样new就完成了 实例化, 接下来在main 方法里面 cat这个变量定义了一个值 也就是 笨笨,cat根据引用变量 修改 指向栈里面的值,也就是0*001里面的值。
-
然后根据栈指向堆里面的值 进行输出。