标题: java.lang.StackOverflowError [打印本页] 作者: 丁朋伟 时间: 2011-9-21 08:34 标题: java.lang.StackOverflowError 挺郁闷的错,高手指点下
public class Person {
Person person ;
public static void main(String[] args){
Person a = new Person();
}
{
person = new Person ();
}
public Person(){
System.out.println(person);
}
}
报错:Exception in thread "main" java.lang.StackOverflowError作者: 匿名 时间: 2011-9-21 08:38
你的程序貌似有问题,再说你想写什么样的程序,怎么写成这样了,自己把自己搞了....
建议对java不太熟悉的话,就不要写这种没人写的程序来考研自己对java的理解程序,这样没多大意义,实际中谁也不会设计这样的程序。。。。作者: 匿名 时间: 2011-9-21 08:47
小生在学习构造器初始化,出了点小问题,如果您解决不了,又耽误了您的时间我深感歉意作者: 匿名 时间: 2011-9-21 08:58
package test;
public class Person {
Person person;
public static void main(String[] args){
Person a = new Person();
}
{
[color=Red]person = new Person (); //代码2[/color] }
[color=Red] public Person(){ //代码1
System.out.println(person);
} [/color]}
你的程序首先执行代码1然后执行代码2,然后就一直循环执行代码1和代码2,是一个死循环,因为person类的构造方法执行的时候要先去执行代码块,然后执行构造函数,而代码块中有调用了构造方法,这样就死锁了,希望能帮你。作者: 匿名 时间: 2011-9-21 09:31
public class Person {
Person person;
public static void main(String[] args) {
Person a = new Person();
}
{
System.out.println("aaaa");
person = new Person();
}
public Person() {
System.out.println(person);
}
}
在程序块里打印一句话
输入:
aaaa
aaaa
aaaa
aaaa
aaaa
aaaa
aaaa
aaaaException in thread "main" java.lang.StackOverflowError
at sun.nio.cs.ext.DoubleByteEncoder.encodeArrayLoop(DoubleByteEncoder.java:126)
at sun.nio.cs.ext.DoubleByteEncoder.encodeLoop(DoubleByteEncoder.java:189)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:544)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:252)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
at java.io.PrintStream.newLine(PrintStream.java:495)
at java.io.PrintStream.println(PrintStream.java:757)
at Test.Person.<init>(Person.java:12)
说明先执行的是代码块的代码,再调用构造方法
假如这样改动代码
public class Person {
static Person person = null;
public static void main(String[] args) {
Person a = new Person();
}
static{
System.out.println("aaaa");
person = new Person();
}
public Person() {
System.out.println(person);
}
}
输出结果:
aaaa
null
Test.Person@de6ced
为什么会出先空值呢?作者: 匿名 时间: 2011-9-21 10:09
是这样的