当前位置: 技术问答>java相关
一个简单的程序,编译可以通过但是,不出现结果,错误提示为无数个at Test.<init>(TestNonStatic.java:8),怎么回事
来源: 互联网 发布时间:2015-03-14
本文导语: 一个简单的程序,编译可以通过但是,不出现结果,错误提示为无数个at Test.(TestNonStatic.java:8),怎么回事 class Test { Test() {} Test t= new Test(); int fact(int n) { if(n>0) { return t.fact(n-1)*n;//递归...
一个简单的程序,编译可以通过但是,不出现结果,错误提示为无数个at Test.(TestNonStatic.java:8),怎么回事
class Test {
Test() {}
Test t= new Test();
int fact(int n) {
if(n>0) {
return t.fact(n-1)*n;//递归调用类Test内的fact函数
}
else {
return 1;
}
}
}
public class TestNonStatic {
public static void main(String[] args) {
Test t1=new Test();
int m=t1.fact(5);
System.out.println(m);
}
}
class Test {
Test() {}
Test t= new Test();
int fact(int n) {
if(n>0) {
return t.fact(n-1)*n;//递归调用类Test内的fact函数
}
else {
return 1;
}
}
}
public class TestNonStatic {
public static void main(String[] args) {
Test t1=new Test();
int m=t1.fact(5);
System.out.println(m);
}
}
|
对象初始化出现无穷递归调用。
语句Test t= new Test()是对象初始化语句,这种语句在构造一个新的Test对象会被调用。
而该语句本身又要求构造新的Test对象。这样构造新对象和对象初始化相互调用,导致无穷递归
语句Test t= new Test()是对象初始化语句,这种语句在构造一个新的Test对象会被调用。
而该语句本身又要求构造新的Test对象。这样构造新对象和对象初始化相互调用,导致无穷递归
|
把Test t = new Test();及
把return t.fact(n-1)*n 改成return fact(n-1)*n;
把return t.fact(n-1)*n 改成return fact(n-1)*n;
|
just so , clarity。