比如:class Test
{
public void fun()
{
Test s=new Test();//这句为什么不会引起无限递归?
System.out.println("test!");
}
}就是创建一个Test对象时,会创建fun()然后再创建Test对象……无限循环下去,如果方法是static比较容易理解,因为static方法是类创建类时创建,所以创建对象时不会引起递归,但非static方法为什么也不会引起递归?
{
public void fun()
{
Test s=new Test();//这句为什么不会引起无限递归?
System.out.println("test!");
}
}就是创建一个Test对象时,会创建fun()然后再创建Test对象……无限循环下去,如果方法是static比较容易理解,因为static方法是类创建类时创建,所以创建对象时不会引起递归,但非static方法为什么也不会引起递归?
解决方案 »
- ### 【转载】Java调用SQL Server的存储过程详解
- jasperreport打印票据的问题 求解~~
- char类型的变量能存放一个汉字吗?谢谢!
- 请教一个线程同步的问题
- 关于WSAD和windows2003的问题(散份)
- 如何启动远程对象服务器
- 如果数据库操作方法用throws抛出SQLException, 怎样有效的关闭数据库资源?
- rmi客户不能向服务器传送*.class 请问可能有哪些原因???
- 学 习 遇 到 困 难 , 请 大 虾 出 手 相 救 . 在 线 等 !
- 有哪位网友知道JpadPro 4.2 Build 611的注册码。拜托给一个,感谢不尽!
- 新手求意见 定义的一学生类,并创建类的对象。
- 求解
当你 Test a = new Test(); 时,a 得到了一块属于自己的土地;
接着,当你 a.fun();时, a.fun()的局部变量s 拿到了一块地,但是s并没有再 s.fun(),怎么会递归呢?
除非你把fun方法放到构造函数中,但会抛出异常。
public class Test { /**
* @param args
*/
public static void main(String[] args) {
T1 t1 = new T1();
}}class T1{
public T1(){
this.fun();
}
public void fun(){
T1 t1 = new T1();
System.out.println("fun");
}
}
public Test() {
Test t = new Test();
System.out.println(t);
}
}
//试一下这个;
Exception in thread "main" java.lang.StackOverflowError
public class Run { public static void main(String[] args) {
Test t = new Test();
t.test();
}}
class Test{
public void test() {
Test t = new Test();
System.out.println(t);
}
}不会无限递归
2.静态函数和非静态函数的区别仅在于创建时期不同,即载入内存的时间不同,所以静态函数如果会主动调用自身也会产生无限递归