Java 中的对象在内存中是如何存储的?

yufei       5 年, 6 月 前       746

Java 语言中,所有的对象都是在堆 ( heap ) 上动态分配的。

这点和 C/C++ 有所不同。在 C/C++ 语言中,对象既可以在堆 ( heap ) 上分配,也可以在栈 ( stack ) 上动态分配。

在 C/C++ 语言中,如果我们使用了 new 关键字来分配一个对象,对象在堆(heap)上分配。其它情况下,只要不是静态或全局的对象,都是在栈 ( stack ) 上分配的。

在 Java 语言中,当我们只是声明了一个变量的类型时,如下所示,只是简单的创建了一个引用,实际上并没有为该对象分配任何内存。

Object person;

要为对象分配内存,我们必须使用 new 关键字。因此,Java 中的对象始终都是在堆(heap)上分配的。

例如下面的代码,编译时会报错,提示 "Error here because t is not initialized"

JavaTester.java

public class JavaTester
{ 
    void show() 
    { 
        System.out.println("Test::show() called"); 
    } 

    public static void main(String[] args)  
    { 
        JavaTester t;  

        // 编译错误,因为 t 并未初始化
        t.show();  
    }
}

编译结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
JavaTester.java:13: 错误: 可能尚未初始化变量t
        t.show();  
        ^
1 个错误

如果要修正这个错误,我们必须使用 new 关键字来初始化一个对象

public class JavaTester
{ 
    void show() 
    { 
        System.out.println("Test::show() called"); 
    } 

    public static void main(String[] args)  
    { 
        JavaTester t = new JavaTester();  

        t.show();  
    }
}

编译运行上面这段代码,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
Test::show() called
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.