Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内存运行时中创建了多少个对象?_Java_Oop - Fatal编程技术网

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

我现在正在学习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 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()
    被创建)
  • 使用探查器,运行代码并计算对象数。但请记住,这一结果将完全取决于JVM实现


    忘掉这个问题。如果你在网上随机搜索,这道考题会有拼写错误。许多网站都提到了obj3,但它并不存在。您的朋友可能从包含打字错误的来源阅读

    谁创造的
    args
    也是一个对象,但这是否相关?而且在后台创建的对象多得多。@Tom它要求提供MarkListobjects@john这就是你应该在问题中包含的信息。