A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雪人 中级黑马   /  2013-10-14 22:05  /  1459 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 雪人 于 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. }
复制代码
然后就报错了. 啥意思啊...

评分

参与人数 1技术分 +1 收起 理由
李江 + 1

查看全部评分

6 个回复

倒序浏览
FFF 金牌黑马 2013-10-14 22:14:09
沙发
栈溢出错误
你把自己无限的实例化,一直把自己实例化,0实例了一个自己1,然后自己1又实例一个自己2,2又实例一个自己3```无限循环。栈溢出。
弱弱问一句,为什么要这么写?

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
我也想问为啥这么写?
回复 使用道具 举报
      因为main方法被循环调用,而且后面执行的main方法不完成,最初的无法结束.导致运行的main线程越来越多,最终栈内存溢出.
      还有main方法是静态方法.静态方法只和类有关,与对象无关.
所以你使用 t.main(new String[]{"what"})是不规范的,不如使用Test01.main(new String[]{"what"}).

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
FFF 发表于 2013-10-14 22:14
栈溢出错误
你把自己无限的实例化,一直把自己实例化,0实例了一个自己1,然后自己1又实例一个自己2,2又实 ...

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

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

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

现在我貌似懂了报错的原因了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马