当前位置: 首页 > 知识库问答 >
问题:

尝试在超类中创建继承类的新对象时出现StackOverflower错误

单于钊
2023-03-14

我是Java的新手。谁能给我解释一下为什么会显示StackOverflowerr?

public class MainClass {

    static Start st = new Start();

    public static void main(String[] args) {        
        st.start();
    }
}


public class Start {

    Generator objGenerator = new Generator();

    void start() {      
        objGenerator.generator();
    }
}


public class Generator extends Start {

    void generator() {
        //...
    }
}

如果Generator类不是从类开始继承的,那么一切都正常,但为什么呢?

共有3个答案

顾嘉纳
2023-03-14

StackOverflow错误的原因是对象的递归实例化没有终止。递归对象语句如下所示。

步骤1:静态启动st=新启动();

步骤2:由于成员变量objGenerator的初始化,实例化Start对象需要实例化生成器对象。

Generator objGenerator = new Generator();

步骤3:由于Generator是Start的子类,实例化Generator对象需要实例化Start对象,这将返回到步骤2。

实际上,你处在一个无限循环中,在第二步和第三步之间来回循环。一旦达到堆栈限制,就会抛出StackOverflow异常。

况鸿雪
2023-03-14

Generator继承Start

class Generator extends Start

然后Start在构造时创建一个生成器

Generator objGenerator = new Generator();

如下所示:

public class Start {

    Generator objGenerator;

    public Start() {
         objGenerator = new Generator();
    }
}

>

这将调用生成器的构造函数。

Generator的构造函数做的第一件事是调用Super()

super()Start的默认构造函数。

转到1。

马梓
2023-03-14

当创建Generator的实例时,调用start的构造函数,因为Generator扩展了start。这称为构造函数链接。

然而,当你调用start的构造函数时,你还有一个变量,叫做newGenerator。。。

你创建一个Generator,它是一个start,它创建一个Generator,它是一个start...

 类似资料:
  • 问题内容: 所有自定义类/对象的超类是否隐式继承?我以为Java不支持多重继承。我问的原因是,如果我已经从我的自定义类中的另一个类继承了,并且Java再次在它之上强制隐式继承,这不是多重继承吗? 另外,java.lang.class类还是所有自定义类/对象的超类吗?如果没有,如何在Java反射中获取传递的任何类的类类型,或如何在任何对象上调用isInstance? 问题答案: 一切都是对象,说您可

  • 问题内容: 是否有理由要声明类声明object? 我刚刚找到了执行此操作的代码,但找不到很好的理由。 问题答案: 是否有理由要声明类声明object? 在Python 3中,除了Python 2和3之间的兼容性之外,没有任何理由。在Python 2中,原因很多。 Python 2.x故事: 在Python 2.x(从2.2开始)中,有两种类型的类,取决于是否存在object作为基类的类: “经典”

  • 创建对象的几种方式 通过Object <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>01_Object构造函数模式</title> </head> <body> <!-- 方式一: Object构造函数模式 * 套路: 先创建空Object对象, 再动态添加属性/方法 * 适用场景

  • 问题内容: 我有一个带有很多参数的基类: 所有继承类都应运行基类的方法。 我可以在每个继承的类中编写一个将调用超类的方法,但这将是严重的代码重复: 自动调用超类的最Pythonic方法是什么? 问题答案: 如果有助于解决您的噩梦,请考虑使用 args和* kw。

  • 问题内容: 我的数据模型代表法人实体,例如企业或个人。两者都是纳税实体,都具有TaxID,电话号码和邮件地址的集合。 我有一个Java模型,其中有两个扩展抽象类的具体类。抽象类具有两个具体类共有的属性和集合。 我正在 MySQL* 数据库上使用 Hibernate JPA注释,其类如下: * 问题是,和对象需要参考他们的主人,这是一个。hibernate抱怨: 看来这将是一个相当普遍的Java继承