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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凡延海 中级黑马   /  2012-5-21 15:01  /  1216 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
public class ExceptionTest {


public static void main(String[] args) {
  
  try
  {
   FileInputStream fis=new FileInputStream("a.txt");
   while((fis.read())!=-1)
   {
    System.out.println((char)(fis.read()));
   }
   fis.close();
  }
  catch(IOException e)
     {
      System.out.println("输入输出错误");
      e.printStackTrace();
     }
     catch(FileNotFoundException e)
  {
   System.out.println(" 找不到文件");
   e.printStackTrace();
  }
}
}
我编译的时候就说已经捕获到异常了,为什么呢,不是已有在运行的时候才可以捕获到异常么?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 父类放下面

查看全部评分

4 个回复

倒序浏览
是因为你上面有一个IOException ,下面的FileNotFoundException是IO异常的子类,上面捕获IO异常时把这个FileNotFoundException异常也捕获了,所以编译时会出错。你如果想专门捕获FileNotFoundException异常的话,可以把两个catch换下位置就行了。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
异常分为两种:编译时异常和编译时不被检测的异常(运行时的异常,RuntimeException和其子类)。报异常有时候是程序自身的错误  大部分是你程序逻辑有错误。
回复 使用道具 举报
兄弟,两个catch的内容弄反了,应该是更具体的异常在前面。
FileNotFoundException 属于IOException;你这样的代码,永远捕获不到FileNotFoundException。
所以,把两个catch颠倒一下就ok了{:soso_e113:}
回复 使用道具 举报
嗯我去看API文档了,发现是的FileNotFoundException类是IOException的子类,还有很多的类,要记住还真不容易,看来要慢慢的记忆才行了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马