public class StaticTest {
public static void main(String[] args) {
String s=TestStaticString.s;
}
}
class TestStaticString{
String ss=new TestStaticString().sp("003");
static String s=new TestStaticString().sp("001");
static String S;
static{
S=new TestStaticString().sp("002");
}
String sp(String s){
System.out.println(s);
return s;
}
}那句003运行时出错了运行时报
Exception in thread "main" java.lang.StackOverflowError
at thinking_in_java_4_exercises.TestStaticString.<init>(StaticTest.java:10)

解决方案 »

  1.   

    无限循环了吧public class StaticTest {
        public static void main(String[] args) {
        String s=TestStaticString.s;   //执行第1步
        }
    }
    class TestStaticString{    
        String ss=new TestStaticString().sp("003");
        static String s=new TestStaticString().sp("001");  
                                    //执行第2步,此时需要创建一个TestStaticString对象,其中static块会在对象创建时执行
        static String S;
        static{
            S=new TestStaticString().sp("002");  //执行第3步,然后这个又会执行static块...然后一直在这一步循环了
        }
        String sp(String s){
            System.out.println(s);
            return s;
        }
    }
      

  2.   


    static块只会执行一次不会一直执行的好不
      

  3.   

        String ss=new TestStaticString().sp("003");
    这句一直递归运行,无法结束.
    ss 是个成员变量,在生成对象的时候要显示赋值。
    在赋值时,需要"new"一个对象出来,而在"new"这个对象的时候,最后又要这了,又要"new"一个新的对象.....
    最后堆栈溢出了。
    解决这个问题用"this",当前对象。
        String ss=this.sp("003");
      

  4.   

    String ss=new TestStaticString().sp("003");
    对就是这个的问题,会不停的递归调用,
    一般要new本对象都是回做成静态的
      

  5.   

    自身归递问题
    new自身的时候,再次调用new,无限new下去了