java - Java 中的对象初始化

标签 java constructor

考虑以下代码。

public class Skyler {
Skyler s1=new Skyler();
public static void main(String asd[]){
         Skyler s2=new Skyler();
    }
}

它会产生 java.lang.StackOverflowError 异常。为什么?

还请考虑以下代码。

public class Skyler {
    Skyler s1=new Skyler();
    static Skyler s2=new Skyler();
    Skyler(){
        System.out.println("const");
    }
    public static void main(String sdp[]){}
}

这也会生成相同的 java.lang.StackOverflowError 异常。为什么?

两个异常的原因是否相同?

最佳答案

你经历了一个循环,在这个循环中,构造函数多次调用它自己,直到它溢出。

例如:

enter image description here

这两种情况的原因都是一样的。没完没了的自称。

在这两种情况下,只有一次不同之处在于,您提供了带有打印语句的默认无组织构造函数,以便您可以看到该打印语句,直到出现错误

关于java - Java 中的对象初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33036996/

相关文章:

c++ - 对于具有静态存储持续时间的对象,在编译时可以应用哪些类型的构造函数作为优化?

Java : How to set parent and grandparent member variables with best coding practice

java - Android线程通信AsyncTask

java - Android Studio 2.2.0.12 设计器自动在 View ID 之前添加 "@+id"前缀,这会导致此异常错误

java - OpenShift Pro - 实时和测试站点 - 最佳实践/替代方案

c++ - 将构造函数转发给成员对象

c++ - C++ 编译器如何创建对象?

java - 有没有比使用单个类更好的方法来提供辅助方法来测试 Web 应用程序?

java - 如果 trustStore 证书过期怎么办?

c++ - 为什么默认参数构造函数被称为默认构造函数