在java中的不同位置是否可以创建完全相同的对象?
同一个对象在不同的位置创建时会发生什么情况。第一个对象在类内但在方法外,第二个对象在同一类的方法内..可能吗。。??代码很好,但在运行时会出现一些异常,如:在java中的不同位置是否可以创建完全相同的对象?,java,Java,同一个对象在不同的位置创建时会发生什么情况。第一个对象在类内但在方法外,第二个对象在同一类的方法内..可能吗。。??代码很好,但在运行时会出现一些异常,如:assert 是的,上述代码有效,在中创建了两个不同的对象 记忆 也正如@s所建议的ᴜʀᴇsʜᴀᴛᴛᴀ , 由于在顶层创建对象,它会生成java.lang.StackOverflowerError 如果在不同的位置创建相同的对象,会发生什么情况 创建2个对象。如果需要,您可能无法创建N个这样的对象 第一个在类内部但在方法外部,第二个在同一类的
assert
是的,上述代码有效,在中创建了两个不同的对象
记忆
也正如@s所建议的ᴜʀᴇsʜᴀᴛᴛᴀ , 由于在顶层创建对象,它会生成java.lang.StackOverflowerError
如果在不同的位置创建相同的对象,会发生什么情况
创建2个对象。如果需要,您可能无法创建N个这样的对象
第一个在类内部但在方法外部,第二个在同一类的方法内部。可能吗
对
顶部的一个充当Test
类的实例成员,您在方法内部创建的一个实例成员是该方法的本地成员
代码很好,但在运行时会出现一些异常,如:在测试时
这就是堆栈溢出错误。您正试图在顶层的测试类中创建测试对象,因此构造函数将继续在递归中调用,从而导致错误
class Test{
Test d = new Test(); // instance object
public static void main(String[] args) {
Test d1 = new Test(); // local to this method
System.out.println(d1);
}
}
线程“main”java.lang.StackOverflower中出现异常
测试时。(Test.java:2)
您正在递归地创建
测试的新实例,直到内存不足
让我们一步一步来看看:
在main
方法中,您有:
Exception in thread "main" java.lang.StackOverflowError
at Test.<init>(Test.java:2)
这将创建一个新实例Test
,因此在初始化Test
时,您将创建一个新变量:
Test d1 = new Test();
因此,将创建新对象,但与之前相同,您将再次创建Test
的新实例,这将再次创建Test
的新实例:
Test d = new Test();
这将无限期地发生,直到内存耗尽。它不是同一个对象。d!=d1
所以它们是不同的对象。是的,您将在堆栈溢出错误中结束
Test d = new Test();
Test d = new Test();