黑马程序员技术交流社区

标题: 程序没有错怎么报异常呢 请教 [打印本页]

作者: Zenith    时间: 2014-1-4 16:44
标题: 程序没有错怎么报异常呢 请教
Exception in thread "main" java.lang.StackOverflowError
求解释下!


作者: Zenith    时间: 2014-1-4 16:46
  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. 刚才没发对  就这个程序运行后报的异常
复制代码

作者: 杨丽静    时间: 2014-1-4 16:54
这是堆栈溢出异常,可能是你写的数据过大,或者递归的时候把方法调用存在堆栈里,反反复复存的太多。你把数据调小一点试试
作者: 高亮亮    时间: 2014-1-4 17:14
你增强for循环的大括号呢?
我觉得这个问题相当严重...没有大括号的辅助定位变量作用域,可能引起的问题状况比较多.
你的增强for循环没有大括号,你认为他能管理的循环体应该到哪里?
我用断点帮你看了下,他其实只默认将下一句代码,
就是你的  
if (array.isDirectory()) {  
          getFile(f);
}
代码作为循环体.所以,后面代码理论上只要前面遇到任意一个文件夹的File对象,就会进入死循环.
希望楼主注意大括号问题.推荐任意时候,不要省略任意大括号,if,else语句的else,括号,等等.
因为Java是强类型语言.希望注重格式.





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