java基础好的进.一个奇怪的问题

来源:百度知道 编辑:UC知道 时间:2024/04/27 18:54:01
public class Test extends Demo {
public Test()throws Exception{
new Test1();
}
class Test1 extends Demo1{
public Test1()throws Exception{
new Test1();
}
}
public static void main(String[] args)throws Exception{
new Test();
}
}
class Demo{
public Demo(){
System.out.println("demo");
}
class Demo1{
public Demo1(){
System.out.println("demo1");
}
}
}
上面会出现什么结果

是个死循环,导致栈满了...
其实道理并不是很难,分析一下..
Test和Test1分别继承了Demo、Demo1,但是并没有写一个super的构造器,这样编译器就会自动生成一个空参数的super构造器,这样父类的构造器始终在子类构造前被执行..
又因为此程序Test调用了Test1的构造函数,Test1自己调用自己导致进行死循环,导致栈满,生成错误..
个人的一点看法..
呵呵!

demo
demo1
demo1
demo1
demo1
demo1
demo1
demo1
demo1
。。。

直到

Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.SingleByteEncoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.SingleByteEncoder.encodeLoop(Unknown Source)
at java.nio.charset.CharsetEncoder.encode(Unknown Source)
at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.PrintStream.write(Unknown Source)
at java.io.PrintStream.print(Unknown Source)
at java.io.PrintStream.println(Unknown