在一次采访中,我被问到为什么动态创建java中的对象?
我无法理解这个问题,任何机构都能解释一下吗?
答案 0 :(得分:3)
这个人可能指的是Java不像C ++那样知道堆栈上的隐式对象创建。
std::string string;
在
中用C ++在堆栈上创建一个对象String string;
只是在Java中创建一个引用,但没有创建任何对象(并且没有调用构造函数)。
如果您对该主题感兴趣,我建议您阅读有关Java内存模型的更多信息。
答案 1 :(得分:1)
对我来说似乎这个问题问为什么Java中的对象只使用动态分配的内存创建(使用new
关键字),而不是使用静态分配的内存创建(例如在C ++中)。 如果(这是一个很大的问题)这就是问题的意思,你可以回答一些问题。
在回答之前,必须注意问题的前提并不完全正确(你甚至可以说它是错误的)。 Java对象不是严格动态创建的。如果转义分析可以证明引用没有转义给定范围,则可以编译它以便它使用静态分配。
鉴于上述情况,一个可能的答案是抽象。堆栈和堆(传统上分别与静态和动态内存关联)实际上是实现细节(即使我们已经习惯了它们)。 Java试图隐藏它,因此它不会为你提供静态或动态内存等术语 - 它甚至不会给你内存,它会为你提供对象。
另一个答案(再次,给出注释)是对象的真实世界用法。在现实场景中,很多时候,对象确实需要逃避它们的初始范围,使动态分配成为唯一有效的候选者。
答案 2 :(得分:0)
一个非常开放的问题,需要一些背景来给出一个好的答案。
它不是特定于Java,而是针对所有编程语言。每个对象都可以是动态的,因为为对象分配的内存是在运行时从执行平台上可用的资源中分配的。即使是常量,静态类和类似概念,只有在实际执行文件时才使用内存。
静态对象可能存在于某些硬件硬编码值中,例如BIOS或TPL模块的某些部分。这些值是只读的 - 没有已知的方法来更改对象的值。
然而,这只是一个单一的答案取决于我认为动态意味着什么。这是主观的,不同的人可能会提出其他有效的答案。除非有一些额外的背景,否则这对面试来说不是一个好问题。
答案 3 :(得分:0)
如果你接受问题,我会说:
所以你不必一次加载所有内容(在init fase上)并将其保存在内存中直到应用程序/程序结束。这为您提供了更高效的内存使用率。
- )