public class Test01 { public String var;

public Test01(){var="a";}
Test01 t1=new Test01();
void p (){System.out.println(var);}
public static void main(String[] args) {
Test01 pp=new Test01();
pp.p();
}

}一运行就出错

解决方案 »

  1.   

    public class Test01 { public String var; public Test01() {
    var = "a";
    } //Test01 t1 = new Test01(); void p() {
    System.out.println(var);
    } public static void main(String[] args) {
    Test01 pp = new Test01();
    pp.p();
    }
    }注释的这行代码没意义啊
      

  2.   

    public class Test01 { public String var;

    public Test01(){var="a";}
    static  Test01 t1=new Test01();
    void p (){System.out.println(var);}
    public static void main(String[] args) {
    Test01 pp=new Test01();
    pp.p();
    System.out.println();
    }

    }
    这样就不出错了
      

  3.   

    Test01 t1 = new Test01(); 靠, 楼主这样的写法是要闹哪样?
      

  4.   

    Test01 t1=new Test01();这表示要声明一个成员属性t1,这个t1又实例化为自身类型,于是,无限循环下去了,形成一个无底洞,最终栈溢出了。
      

  5.   

    我是这么理解的,不知道对不对:static 关键字修饰的类本身的实例在类初始化时,开辟一块单独内存空间,逐个对类本身各个属性的初始化,当再次初始化到这个类本身实例时,因为static修饰,所以并没有再次赋值,而是直接指向新开辟的内存空间,也许jvm设定了这个指向自身的指针。大神们,不知道对不对!!!?
      

  6.   

    jvm 中是由一块静态变量内存啊,
    给个传送门,去看看jvm 怎么定义的http://bbs.csdn.net/topics/390251794
    感谢java2000_wl
      

  7.   

    上面那位用static的方法是因为static在内存中只会生成一次。你原始代码是死循环。但有static只new一次。所以运行正确。