我在很长一段时间内搜索了这个问题的答案,并且我做了很多不同的测试,并且我已经缩小并简化了我的Java Applet中的一个错误,直到这一小段代码。我猜这个完全相同的错误会出现,如果它不是一个Applet。
这是Main类。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.lang.*;
public class Main extends Applet{
public int[] a = {2};
public int[] b = new int[1];
public void init(){
b[0] = 4;
Otherclass s = new Otherclass();
}
}
这是其他类。
import java.util.*;
import java.lang.*;
public class Otherclass extends Main{
public Otherclass(){
System.out.println(super.a[0]);
System.out.println(super.b[0]);
}
}
预期产出:
2
4
实际输出:
2
0
我做错了什么?
提前致谢, 米卡
答案 0 :(得分:2)
当您创建了Otherclass的实例时,它是Main实例的一个不同实例。因此,在Main实例中b [0] = 4,但未在Otherclass实例中初始化。
您会看到[0]的相同值,因为它是使用类初始化的。
答案 1 :(得分:1)
您在b
的构造函数中使用了Otherclass
- 这将在Applet
启动程序执行init
之前执行。
如果你提出这个陈述:
b[0] = 4;
进入Main
的构造函数,它将在Otherclass
的构造函数体之前执行。
请注意,您在s
中初始化init
毫无意义。
答案 2 :(得分:0)
原因是您从未在刚刚创建的OtherClass实例中初始化该数组。创建OtherClass的实例时,您在Main init()方法中拥有的代码片段:
b[0] = 4;
从不为OtherClass实例b数组执行,该数组是内存中完全不同的变量,而不是为Main类实例存在的b数组。这就是你没有在数组中看到'4'的原因