class Size{
Size(){
}
//public final Size SMALL = new Size();//infinite loop
final Size as = new Size();//infinite loop
//static Size aw = new Size();//No infinte loop
}
class b{
static public void main(String ftr[]){
Size z = new Size();
}
}
Run Code Online (Sandbox Code Playgroud)
当静态大小aw等于new Size(); 上述程序运行时出错.当程序运行时,请参阅下面的方案:
public final Size SMALL = new Size();// infinite loop is happening
final Size as = new Size();
Run Code Online (Sandbox Code Playgroud)
一个无限循环正在发生,程序正在给予
Exception in thread "main" java.lang.StackOverflowError
at Size.<init>(Interesting.java:6)
at Size.<init>(Interesting.java:6)
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释,或者指出我可以找到背后原因的地方.
final Size as = new Size();
Run Code Online (Sandbox Code Playgroud)
as是一个实例变量,所以每个实例Size都有它.Size调用的构造函数as = new Size(),从而创建一个新的实例Size,反过来它也将启动构造函数并调用as = new Size()....导致无限的递归构造函数调用.
这里的要点是要注意,因为它as是一个实例变量,所以每次创建一个对象时 - 它都在构造函数中初始化.
您可能想as通过声明它来创建一个类变量static.这将导致初始化as仅发生一次并阻止无限构造函数调用.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |