为什么我在构造函数中收到StackOverflowErrorexception

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:

 Exception in thread "main" java.lang.StackOverflowError at com.java8.Cloning.(Cloning.java:6) 

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

您有一个无限的构造函数调用链,这会导致StackOverflowError

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

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

 Cloning c=new Cloning(); 

 static Cloning c=new Cloning(); 

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

你不是要写static Cloning c = new Cloning(); main 之外或者 c = new Cloning(); main 内部

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

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