1.看下面代码是合法的吗?
public class Complex{ private Complex instance=new Complex(2); public Complex(int i){ System.out.println(i); } public static void main(String args[]){ Complex complex=new Complex(1); } }
输出结果:
Exception in thread "main" java.lang.StackOverflowError
at com.wjy.enumstudy.Complex.<init>(Complex.java:8)
at com.wjy.enumstudy.Complex.<init>(Complex.java:8)
at com.wjy.enumstudy.Complex.<init>(Complex.java:8)
at com.wjy.enumstudy.Complex.<init>(Complex.java:8)
at com.wjy.enumstudy.Complex.<init>(Complex.java:8)
原因:出现了无限的递归。实例instance初始化操作是先于构造器的程序体而运行的。
2.看看下面的代码就不会出错了:
public class Complex{
private static Complex instance=new Complex(2);
public Complex(int i){
System.out.println(i);
}
public static void main(String args[]){
Complex complex=new Complex(1);
}
}
运行结果:
2
1
3.最后看这个:
public class Complex{
private static Complex instance=new Complex(2);
public Complex(int i){
System.out.println(i);
}
public static void main(String args[]){
//Complex complex=new Complex(1);
}
}
输出结果:
2