Java 内存运行时中创建了多少个对象?
我现在正在学习1z0-803 Java证书考试。我们必须找出在此应用程序中创建了多少个Java 内存运行时中创建了多少个对象?,java,oop,Java,Oop,我现在正在学习1z0-803 Java证书考试。我们必须找出在此应用程序中创建了多少个MarkList实例: public class MarkList { int num; public static void graceMarks(MarkList obj4) { obj4.num += 10; } public static void main(String[] args) { MarkList obj1 = new MarkList
MarkList
实例:
public class MarkList {
int num;
public static void graceMarks(MarkList obj4) {
obj4.num += 10;
}
public static void main(String[] args) {
MarkList obj1 = new MarkList();
MarkList obj2 = obj1;
obj2.num = 60;
graceMarks(obj2);
}
}
我的一位朋友说,在这个问题上,答案是两个对象。我认为这只是一个(obj1
),尽管我可能错了,因为我是Java新手,但对C#有一些经验。答案是一个对象。
MarkList obj1=新的MarkList()代码>创建一个新的MarkList
对象,MarkList obj2=obj1代码>仅创建对obj1
的引用,因此两者都指向完全相同的对象。
所有其他代码只是样板文件,不创建对象。只创建一个MarkList实例
要了解创建了多少个对象,可以使用以下步骤:
- 搜索构造函数的任何调用(看起来像
newmarklist(…)
)。您可以使用eclipse之类的IDE查找所有引用
- 检查包含构造函数的代码被调用的频率(可以在循环中,也可以在多次调用的方法中)
- 将一次创建的对象放入不同的变量中,或者将它们从一个方法移交给另一个方法,都不会创建额外的实例=>无关
但是,创建了数千个其他实例(在我的Oracle JDK 1.8中)
MarkList.class
已创建
- 创建了字符串[]args
已创建标记列表obj1
Thread.currentThread()
被创建)忘掉这个问题。如果你在网上随机搜索,这道考题会有拼写错误。许多网站都提到了obj3,但它并不存在。您的朋友可能从包含打字错误的来源阅读 谁创造的
args
也是一个对象,但这是否相关?而且在后台创建的对象多得多。@Tom它要求提供MarkListobjects@john这就是你应该在问题中包含的信息。