叙个以前不知道的事情
说个以前不知道的事情
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