我是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类不是从类开始继承的,那么一切都正常,但为什么呢?
StackOverflow错误的原因是对象的递归实例化没有终止。递归对象语句如下所示。
步骤1:静态启动st=新启动();
步骤2:由于成员变量objGenerator的初始化,实例化Start对象需要实例化生成器对象。
Generator objGenerator = new Generator();
步骤3:由于Generator是Start的子类,实例化Generator对象需要实例化Start对象,这将返回到步骤2。
实际上,你处在一个无限循环中,在第二步和第三步之间来回循环。一旦达到堆栈限制,就会抛出StackOverflow异常。
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。
当创建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继承