为什么我在构造函数中收到StackOverflowError异常

问题描述 投票:6回答:3
public class Cloning {

    Cloning c=new Cloning();
    public static void main(String[] args) {

        Cloning c=new Cloning();
        c.print();
    }

    public void print(){
        System.out.println("I am in print");
    }

}

在上面的代码中,我有一个简单的类和一个类级实例,我也有一个同名的本地实例。运行上面的代码时,我得到以下异常:

Exception in thread "main" java.lang.StackOverflowError
    at com.java8.Cloning.<init>(Cloning.java:6)
java stack-overflow
3个回答
23
投票

你的main方法创建了一个Cloning实例(Cloning c=new Cloning();),它导致实例变量cCloning c=new Cloning();)的初始化,这会创建另一个Cloning实例,依此类推......

你有一个无限的构造函数调用链,它导致StackOverflowError

在上面的代码中,我有一个简单的类和一个类级实例

您没有类级别实例。您有一个实例级实例。如果需要类级实例,请更改

Cloning c=new Cloning();

static Cloning c=new Cloning();

7
投票

每次构造Cloning时都会实例化类Cloning,这会导致实例化的递归。


7
投票

你是不是想在static Cloning c = new Cloning();之外写main,或者在c = new Cloning();内写main

否则,每次运行时你都会得到一个c的新实例,这将导致StackOverflowError

目前在c(阴影场Cloning c = new Cloning();)创建的本地c踢掉了整个事情。

© www.soinside.com 2019 - 2024. All rights reserved.