public class Test {
      static Test test = new Test();
      public Test(){
        System.out.println("haha");
      }
      public static void main(String[] args){
         Test test = new Test();
         
      }
     }
输出的居然是haha
            haha
/////因为你进行了递归调用所以出现了两次提示
public class Test {
      Test test = new Test();
      public Test(){
        System.out.println("haha");
      }
      public static void main(String[] args){
         Test test = new Test();
         
      }
     }
//我觉得是因为类的重复定义

解决方案 »

  1.   

    第一个应该是在main方法中实例Test类时,调用构造函数时会对它的成员变量test初始化,所以有一行haha,然后构造函数的内部又打出一行haha,如果你在main方法中再实例一次Test
    类的话就只能显示3行了,应该成员变量test是static型的,只会被初始化一次
      

  2.   

    第一段程序,因为static test在初始化时编译,调用test()方法,输出一次"haha",main()方法又调用,所以输出两次。
    第二段程序,因为main()方法调用时,test不是static 未被初始化就被调用,所以出错。
    第三段程序,没有main()方法,出错。
      

  3.   

    同意 eric22cn(eric22cn)
      

  4.   

    其实很简单,看看java的运行机制就知道了,类成员变量的初始化在构造函数调用前完成,所以static Test test = new Test()先执行,结果输出"haha",然后就是一般的对象初始化过程,所以显示两次是正常的。对象成员变量的初始化是在调用构造函数之后。
    只要理解了这样的过程,那么对上面的问题就迎刃而解了