两者都需要生成一个
StackOverflowError。当包含此行时:
static final GenerateStackOverflow E1 = new GenerateStackOverflow("value1");
GenerateStackOverflow首次访问该类时,将创建的实例。
不包括此行:
final GenerateStackOverflow E2 = new GenerateStackOverflow("value2");
一切都很好。但是这条线很关键。每次
GenerateStackOverflow创建的实例时,它都会尝试初始化其成员变量
E2-另一个
GenerateStackOverflow对象。然后,
该 实例将 其
E2初始化为另一个
GenerateStackOverflow对象。这一直持续到
StackOverflowError出现a
。
如果包括第二行,但不包括第二行,则不会创建任何实例,并且永远不会输入无限递归。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)