gpt4 book ai didi

java - 匿名类构造函数不断循环

转载 作者:行者123 更新时间:2023-12-01 09:45:39 25 4
gpt4 key购买 nike

当我使用下面的代码时,会出现 stackoverflow 异常。看起来第 16 行(即 public my m1 = new my())被重复调用。有人可以解释一下为什么连续调用它吗?

abstract class my {
static int i = 0;
my(){

System.out.println("my constructor " + i++);
}
public void mymethod() {
System.out.println("Abstract");
}


public my m1 = new my() {

public void mymethod() {
System.out.println("Inside Abstract");
}
};

最佳答案

您有一个实例字段 m1,您可以通过调用 new my 来初始化该字段。实例字段初始化是在构造过程中完成的。1因此,您构造了一个实例,构造该实例需要构造另一个实例来分配给m1;构造该实例需要构造一个实例来分配给 m1;构造需要构造另一个实例,这......

你明白了。

Peter said到目前为止,了解某些内容如何以及为何以这种方式工作的最佳方法是使用调试器单步执行代码。使用调试器并不是一项高级技术,而是在学习语言过程中早期学习的基本工具。

<小时/>

1 事实上,编译器获取实例初始化代码并将其插入到类中每个构造函数的开头。所以

class Foo {
private int bar = 42;

Foo() {
System.out.println("no args");
}

Foo(int arg) {
System.out.println("one arg: " + arg);
}
}

实际上编译为

class Foo {
private int bar;

Foo() {
bar = 42
System.out.println("no args");
}

Foo(int arg) {
bar = 42
System.out.println("one arg: " + arg);
}
}

关于java - 匿名类构造函数不断循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38070010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com