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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Zenith 中级黑马   /  2014-1-4 16:44  /  1019 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Exception in thread "main" java.lang.StackOverflowError
求解释下!

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

3 个回复

倒序浏览
  1. import java.io.File;

  2. //找出E:\MyJava中所有(.java)文件
  3. public class Test {
  4.         public static void main(String[] args) {
  5.                 // 封装目录
  6.                 File f = new File("E:\\MyJava");
  7.                 getFile(f);
  8.         }

  9.         private static void getFile(File f) {
  10.                 File[] file = f.listFiles();
  11.                
  12.                         for (File array : file)
  13.                                 if (array.isDirectory()) {
  14.                                         getFile(f);
  15.                                 } else {
  16.                                         if (array.getName().endsWith(".java")) {
  17.                                                 System.out.println(array);
  18.                                         }
  19.                                 }
  20.         }

  21. }
  22. 刚才没发对  就这个程序运行后报的异常
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
这是堆栈溢出异常,可能是你写的数据过大,或者递归的时候把方法调用存在堆栈里,反反复复存的太多。你把数据调小一点试试

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
你增强for循环的大括号呢?
我觉得这个问题相当严重...没有大括号的辅助定位变量作用域,可能引起的问题状况比较多.
你的增强for循环没有大括号,你认为他能管理的循环体应该到哪里?
我用断点帮你看了下,他其实只默认将下一句代码,
就是你的  
if (array.isDirectory()) {  
          getFile(f);
}
代码作为循环体.所以,后面代码理论上只要前面遇到任意一个文件夹的File对象,就会进入死循环.
希望楼主注意大括号问题.推荐任意时候,不要省略任意大括号,if,else语句的else,括号,等等.
因为Java是强类型语言.希望注重格式.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马