黑马程序员技术交流社区

标题: 求解... [打印本页]

作者: 雪人    时间: 2013-10-14 22:05
标题: 求解...
本帖最后由 雪人 于 2013-10-15 16:15 编辑

今天好奇,做了个小测试.
  1. public class Test1 {
  2.         public static void main(String[] args) {
  3.                 Test1 t = new Test1();
  4.                 t.main(new String[]{"what"});
  5.         }
  6. }
复制代码
然后就报错了. 啥意思啊...


作者: FFF    时间: 2013-10-14 22:14
栈溢出错误
你把自己无限的实例化,一直把自己实例化,0实例了一个自己1,然后自己1又实例一个自己2,2又实例一个自己3```无限循环。栈溢出。
弱弱问一句,为什么要这么写?
作者: 周志龙    时间: 2013-10-14 22:41
我也想问为啥这么写?
作者: 做只会飞的鱼    时间: 2013-10-15 06:55
      因为main方法被循环调用,而且后面执行的main方法不完成,最初的无法结束.导致运行的main线程越来越多,最终栈内存溢出.
      还有main方法是静态方法.静态方法只和类有关,与对象无关.
所以你使用 t.main(new String[]{"what"})是不规范的,不如使用Test01.main(new String[]{"what"}).


作者: 雪人    时间: 2013-10-15 09:25
FFF 发表于 2013-10-14 22:14
栈溢出错误
你把自己无限的实例化,一直把自己实例化,0实例了一个自己1,然后自己1又实例一个自己2,2又实 ...

其实只是好奇...根本没出于什么想法...因为我看main是一个方法,还有参数,如果传个参数是什么效果.然后就报错了...现在看明白了  好像是个无限递归...
这里说的堆栈溢出,堆栈空间是多大?是虚拟机里面的么?
作者: 雪人    时间: 2013-10-15 09:27
周志龙 发表于 2013-10-14 22:41
我也想问为啥这么写?

仅仅是好奇...报错后,我看了下文档,说 堆栈溢出,可惜我才疏学浅,不太明白...就跑上来问问~~
作者: 雪人    时间: 2013-10-15 09:30
做只会飞的鱼 发表于 2013-10-15 06:55
因为main方法被循环调用,而且后面执行的main方法不完成,最初的无法结束.导致运行的main线程越来越多, ...

恩,是可以直接调用的.
只是我实例化一下.因为这个类还有其他非静态方法,我没有写上来.然后我调用别的方法的时候,就异想天开的调用了一下main方法.

现在我貌似懂了报错的原因了.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2