📜  Java对象如何存储在内存中

📅  最后修改于: 2020-03-18 14:14:52             🧑  作者: Mango

在Java中,所有对象都在堆上动态分配。这与C++不同,在C++中,可以在堆栈上为对象分配内存。在C++中,当我们使用new()分配对象时,该对象分配在堆上,否则分配给堆栈(如果不是全局或静态的)。
在Java中,当我们仅声明class类型的变量时,只会创建一个引用(未为该对象分配内存)。要将内存分配给对象,我们必须使用new()。因此,对象总是被分配在堆内存

例如,以下程序在编译中失败。编译器给出错误“由于未初始化t而在这里出错”:

class Test {
// class
void show()
{
    System.out.println("Test::show() called");
}
}
public class Main {
        // 测试代码
    public static void main(String[] args)
    {
        Test t;
        // 报错,t没有被初始化
        t.show();
    }
}

使用new()分配内存可以使上述程序正常工作。

class Test {
// class contents
void show()
{
    System.out.println("Test::show() called");
}
}
public class Main {
    // 测试代码
    public static void main(String[] args)
    {
        // 使用了new关键字
        Test t = new Test();
        t.show(); // 不报错
    }
}