Java 由相同类型的非静态成员导致的StackOverflower错误

Java 由相同类型的非静态成员导致的StackOverflower错误,java,exception,stack-overflow,Java,Exception,Stack Overflow,下面代码段中的代码抛出java.lang.StackOverflowerError public class Main { private Main m=new Main(""); //This statement causes the exception. private Main(String s) { System.out.println(s); } public static void main(String[] args)

下面代码段中的代码抛出
java.lang.StackOverflowerError

public class Main
{
    private Main m=new Main("");  //This statement causes the exception.

    private Main(String s)
    {
        System.out.println(s);
    }

    public static void main(String[] args)
    {
        try
        {
            Main m1=new Main("The constructor called.");
            System.out.println("Successful!");
        }
        catch (Exception ex)
        {
            System.out.println(ex);
        }
    }
}

故意编写此语句没有任何意义
private Main m=new Main(“”)在类本身内部,但该语句不应该被类中的任何代码使用,那么该语句如何引发异常呢?

每次调用构造函数时,都会创建一个实例,从而执行初始化代码

private Main m=new Main("");
调用构造函数等

你可能想要

private static Main m=new Main("");

为了保持一个单例。

每次调用构造函数时,都会创建一个实例,从而执行初始化代码

private Main m=new Main("");
调用构造函数等

你可能想要

private static Main m=new Main("");

为了保持单例。

程序导致堆栈溢出是绝对正常的。。。 编译器不会检查您的代码中是否使用了成员m,尽管您是对的,但它可能已经这样做了,可能有副作用:对象未生成。。。
为了构造一个主对象,必须构造另一个主对象(私有主m成员)。。。它给出了一个无限递归,因此堆栈流

程序导致堆栈溢出是绝对正常的。。。 编译器不会检查您的代码中是否使用了成员m,尽管您是对的,但它可能已经这样做了,可能有副作用:对象未生成。。。 为了构造一个主对象,必须构造另一个主对象(私有主m成员)。。。它给出了一个无限递归,因此堆栈流

“鸡先于蛋。”-哈哈。“鸡先于蛋。”-哈哈。