Day18

对象创建的内存分析

我们从两块最常用的内存空间对对象创建进行内存分析

  • 堆内存:存放的是对象的具体信息;在程序之中堆内存空间的开辟是通过new完成的
  • 栈内存:存放的是对象的地址信息,即通过地址找到堆内存进而找到对象内容,但是为了简化起见,简单理解将对象的名称保存在栈内存中

堆内存内每一块内存都有着一个专属的地址编号,而栈内存则存放这个地址编号

图解如下:

Day18

我们来分析一个创建对象的案例

public class test {
    public static void main(String[] args) {
        Students stu = new Students();
        stu.name="工地佬";
        stu.age=18;
    }
}

内存图解:

第一步:Students stu = new Students();

Day18

new:在堆内存中开辟新的空间;

Students:定义了对象的信息;存放于所开辟的空间里

stu:对象的名称;存放于栈内存中,实则存放的是新空间的地址信息

第二步:stu.name=”工地佬”;

Day18

第三步:stu.age=18;

Day18

对象化的实例化有两种语法:

  • 使用声明并实例化:Student stu=new Students();
  • 分步完成:① 声明对象Student stu=null; ② 实例化对象 stu=new Students();

分步完成实例化的内存分析:

第一步:Student stu=null;

Day18

第二步:stu=new Students();

Day18

注意

  • 如果代码中只声明了对象,没有实例化,则无法调用。而此时会报错指向异常(NullPointerException),意为没有在辟堆内存开辟空间,即没有new,此异常只有在引用数据类型存在此问题。
© 版权声明
好牛新坐标
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章