为什么这段代码会出错?

时间:2017-04-22 13:02:00

标签: java recursion

package geek;

public class Gfg {

    // constructor
    Gfg() {
        System.out.println("Geeksforgeeks");
    }

    Gfg a = new Gfg(); 

    public static void main(String args[]) {
        Gfg b; 
        b = new Gfg();
    }
}

此程序在运行时给出 线程" main"中的例外情况java.lang.StackOverflowError的

为什么会出现此错误?

2 个答案:

答案 0 :(得分:2)

这会导致StackOverflow,因为您在类本身内创建了类的实例。这导致无限递归,试图创建无限的Gfg嵌套实例。

删除Gfg a = new Gfg();,因为它没有用处。

答案 1 :(得分:0)

原因是以下行导致无限递归:

Gfg a = new Gfg(); 

只要Gfg被实例化,就会执行此操作。由于此行将实例化一个新实例,因此将再次调用该行。