1 class Test
2 {
3   Test test;  
4 }

编译可以通过,没有问题。为什么?类中包含自身,而这个自身又包含自身,这不是无限循环吗?这是因为类类型是引用类型,test其本质上为一个指针,指向真实的类对象,而这个类型并没有new,所以并没有无限循环。但是。如果改为

1 class Test
2 {
3   Test test=new Test();
4 }

则就是无限循环了,所以编译通不过。

另外

1 class Test
2 {
3    static Test test=new Test();
4 }

却可以编译通过,这是因为test是静态成员,属于类本身,不输入任何的实例。无论你创建多少个实例,test跟实例都没有任何关系,所以不会在创建实例的时候创建test,也就没有无限循环。故可以编译通过