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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yjsf216 中级黑马   /  2015-3-8 23:05  /  1203 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yjsf216 于 2015-3-9 09:11 编辑
  1. try{
  2.                         bufis= new BufferedInputStream(new FileInputStream("a.mp3"));
  3.                         bufos= new BufferedOutputStream(new FileOutputStream("b.mp3"));

  4.                         int by= 0;
  5.                         
  6.                         while((by=bufis.read())!=-1){
  7.                                 bufos.write(by);
  8.                         }
  9.                 }
  10.                 catch(IOException e){
  11.                         System.out.println("读取错误");
  12.                 }
复制代码


这里catch可以打印出错误,那为什么还要
  1. catch(IOException e){
  2.         throw new RuntimeException("读取错误");
  3. }
复制代码

都是在屏幕上输出“读取错误”啊

5 个回复

倒序浏览
抛出RuntimeException是为了结束程序吧,我猜是这样的。
回复 使用道具 举报
我觉得一般这样的输出错位是给用户看的、开发者自己看的是直接抛出系统的错误!这样才方便自己找出问题和解决问题!
回复 使用道具 举报
你这个问题就是程序编译和运行的区别!
catch(IOException e){
                        System.out.println("读取错误");
Exception内的所有异常(不包括RuntimeException)是不会再编译(javac)出现问题,就是说你编程时可能没有出现问题,而不代表客户在运行时不会出现错误, IOException就是这样。

catch(IOException e){
        throw new RuntimeException("读取错误");
}
RuntimeException这个很特殊,它的功能就是把可能运行时出现的错误提到编译时,如果有错误就要程序停止在报出()中的内容。如果你看到IO了  你应该有看过了异常。要查漏呀兄弟!我要好多记不住。
加油吧!
回复 使用道具 举报
huangchunwei 来自手机 中级黑马 2015-3-9 07:13:44
报纸
你只看到了表象,却没了解本质。虽然都是会打印出一句话,但是后者抛出的RuntimeException异常对象,告诉Java虚拟机(jvm)这程序有问题,必须停掉。而你纯粹的打印一句话虽然效果一样,但是如果你后面还有语句,那么程序还会继续往下执行的,试想一下,前面已经错误了,执行后面的还有意义吗。是吧。我是这样理解的。
回复 使用道具 举报
从意义上来讲,抛出异常是为了告诉调用你这个方法的上一层代码说这个出错了,如果你不抛异常,而是直接输出,上一层代码是不知道你这里是出了什么错的,因此也不知道如何处理你的错误,在实际开发中,如果你的是底层代码,出了问题,这样直接打印,就可能直接把信息给了用户,而用户根本不知道这是什么意思,所以这种情况要避免!
回到你的问题,io异常本来是编译时异常,你这样
catch(IOException e){
        throw new RuntimeException("读取错误");
}是将编译时的异常转化成运行时异常抛出去,因此会在运行时在控制把"java.lang.RuntimeException:读取错误"这个异常信息打印出来!而且打印出来后程序也会继续执行下去(如果还有代码)。
可以这样理解编译时和运行时异常:
1.编译时异常check exception(Exception):如果一个方法抛出check exception,调用代码要么catch要么在方法声明中重抛该异常,也就是说必须要处理。
2.运行是异常 runtime Exception(RuntimeException):如果一个方法抛出RuntimeException,则调用代码可以catch,也可以忽略。由于可以忽略,初学者可能非常喜欢,简单的说runtime exceptin是针对那些“我这里有问题发生,但是告诉你你也不能解决”的问题。

好吧就说这么多,全部手打,希望能帮助到你!如果觉得我说的有问题,希望大家可以提出来!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马