Java中对象的创建过程(内存分析)
Java中对象创建的时候,用到了new关键字。那么在内存中,究竟发生了什么?
下面先看一段简单的代码:
先是主函数类(Animal)
package cn.sg.oop.second; public class Animals { public static void main(String []args){ Cat c=new Cat(); c.name="小喵喵"; c.age=18; c.eat(); } }然后是一个简单的Cat类:
package cn.sg.oop.second; public class Cat { String name; int age; public void eat(){ System.out.println("小猫正在吃......"); } }代码创建了一个Cat类的具体实例,给Cat的name,age属性赋值,然后调用了一个eat方法
就这几行基本的语句,我们看在内存中发生了什么?
看具体的代码
Cat c=new Cat();Cat c,在内存中把c放入栈中
在new Cat的时候,在堆中创建cat,包括cat类中的属性和方法
并给属性初始化,8种基本的数据类型系统都有默认值,比如数值类型的默认为0,除8种基本的数据类型外,其他的引用类型的统一默认为null,如把age默认为0;Cat c=new Cat(),即把c的地址传给c;需要注意的是这里是地址引用。到目前为止,即把第一条语句Cat c=new Cat()执行完了。
然后是
c.name="小喵喵";这条语句首先在栈中找到c,通过地址的指向,找到name,赋值为“小喵喵”;
c.age=18; c.eat();这两条语句基本相同,先找到c,然后通过地址找到目的地,然后进行相关的操作,由此可见地址的重要性。
对于基本的了解对象在内存中存储,大概就是这样,其实在堆中,其实还有有划分的,小白的我就说这么多了。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。