当前位置: 首页 > 面试题库 >

用Java创建对象时会发生什么?

康言
2023-03-14
问题内容

我的老师给我一个问题:

“用Java创建对象时会发生什么”。

据我所知,创建对象时会发生内存分配,变量初始化和构造函数方法调用。

但是我的老师说我几乎是对的。后面的两件事是正确的,除了内存堆。相反,他说发生了内存分配。我认为对象存储在堆中,所以我的老师错了。你这样认为吗?


问题答案:

与往常一样,找到针对此类问题的解决方案的最佳位置是Java语言规范。

具体来说,从创建新实例的部分可以理解,这是创建新对象时的顺序,只要没有异常发生:

  1. 内存已分配。
  2. 字段被初始化为其默认值。
  3. 除非是,否则将调用所选构造函数的“第一行” Object。通过第一线我的意思是要么显式调用super()this(),或隐式调用super()
  4. 该实例初始化被执行,字段被初始化为它们的请求的值(实际字段初始化通常编译为实例初始化的内嵌部分)。
  5. 其余的构造函数代码将执行。

现在,您的老师可能会将内存分配作为实际的操作系统调用来谈论-
在这种情况下,从JVM管理自己的堆的意义上来说,他是对的,因此Java内存分配不必转换为OS内存分配调用(尽管可以)。



 类似资料:
  • 当我用main方法为类创建对象时会发生什么?我能在main方法中使用这些实例变量吗,因为它们在同一个类中?

  • 我做了研究,发现应该这样做我不知道java对象像指针一样工作。我以为只有当两个对象相等时才会传递值。我甚至创建了一个简单的测试应用程序,它可以设置和获取一个对象的数量。再一次,我把这两个对象都等同起来。更改一个对象的元素似乎也会影响另一个对象。我不知道该怎么在谷歌上搜索这个。所以我才把整个故事都告诉你。我只得到与c编程有关的文档。我觉得我的底子都碎了。我现在才知道是如何工作的。我试着做 这不影响N

  • 问题内容: 在上面的程序中,行之后会发生什么? 是 OBJ1 准备进行垃圾回收,即使其成员对象的一个仍然被引用? 问题答案: 自动垃圾回收是查看堆内存,识别正在使用的对象和未使用的对象以及删除未使用的对象的过程。使用中的对象或引用的对象意味着程序的某些部分仍维护着指向该对象的指针。程序的任何部分都不再引用未使用的对象或未引用的对象。因此,可以回收未引用对象使用的内存。 Java垃圾收集基础知识 在

  • 有ManyToOne链接的表。每个学生被分配一个方向从教育方向。当我创建学生时,所选方向被重新创建。为什么在创建学生时创建方向? 学生: 教育方向: 学生道:

  • 我正在创建一个需要一组玩家的应用程序。我使用团队ID作为每个球员的团队主键和外键。在一个片段中,我创建了一个新团队。创建团队并将其添加到我的房间数据库时,它最初的ID为0或未设置,即使我已将“自动生成”设置为true。然后,我导航到团队花名册视图,该视图能够向团队添加新球员。当我创建新玩家并在团队视图模型中使用新团队ID时,团队ID仍然为0或未设置,因此应用程序崩溃,外键约束失败。崩溃后,如果我重

  • 我正在做一个问答游戏,它将从一个文本文件中阅读一些问题和它们各自的答案。这些问题首先被放入一个ArrayList,然后每个问题都要被转换成一个单独的问题对象。正是在程序的这一部分中,我接收到一个IndexOutOfBoundsException。 文本文件的格式如下: 问题 正确答案 错误答案1 错误答案2 错误答案3 (空行) 问题2 ... ... ... 文本文件在名为IO的类中使用Buff