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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张 涛 中级黑马   /  2012-10-2 19:09  /  1510 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看一些程序中,经常这样处理异常:
  1. public class Test {

  2. public static void main(String[] args) {
  3. FileReader fr = Utils.getFileReader("test.txt");
  4. }

  5. }

  6. class Utils {
  7. public static FileReader getFileReader(String filePath) {
  8. try {
  9. FileReader fr = new FileReader(filePath);
  10. return fr;
  11. } catch (FileNotFoundException e) {
  12. throw new RuntimeException(e);//注释
  13. }
  14. }
  15. }
复制代码
注释部分是处理方式。
问题:
1.为什么这样处理呢?
2.这样throw出一个异常和在方法上throws异常有什么不同吗?
3.如果catch住,不throw,只是打印提示信息呢?
4.一般这样的异常,该怎样处理?三种处理方式该符合选择?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 陈虹旭 于 2012-10-2 19:32 编辑

我还没有学到FileReader 和FileNotException相关的知识,不过今天刚刚学习完RuntimeException,你的程序也大致可以看懂,也对这个知识点稍有理解,我觉得:
1.catch (FileNotFoundException e)
  这里捕获了没有找到文件的异常,没有找到文件,就没有办法对这个程序做任何处理,只能抛出这个异常,但是这个异常是这个文件的异常,而不是你的异常,调用者之所以调用你的getFileReader方法,是要得到一个结果,也就是找到还是没找到,并不是把文件的异常问题给调用者,因为你给他他也看不懂,还是没法处理,他就只能抛给jvm了,所以这里抛出的是RuntimeException,这个异常就是说没法处理,只能让程序停止,跟调用者传的参数有关系,什么时候传进的参数符合要求了程序就能正常运行了
2.RuntimeException这个异常是不用声明的,即使声明了,抛出给调用者,调用者也不用处理,因为它是运行异常
其实没有太大的区别,非RumtimeException异常必须声明,RuntimeException异常可以不用声明,都是都要用throw抛出的
3.catch住不throw只打印信息不是就失去了对程序处理的本质了吗?一般处理都是要做出具体处理的,而不是仅仅打印出信息让调用者看见而已
4.我觉得其实这样的异常都是根据现实描述事物而定的,也就是说看事物是怎样的事物了,根据情况而定来决定对catch所捕获的对象做怎样的解决,我建议你再回头看下RuntimeException的视频

这是我对这个程序的理解,如果有不对的地方望谅解,我是新手,呵呵!不过还是希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  • public class Test {
  • public static void main(String[] args) {
  • FileReader fr = Utils.getFileReader("test.txt");
  • }
  • }
  • class Utils {
  • public static FileReader getFileReader(String filePath) {
  • try {
  • FileReader fr = new FileReader(filePath);
  • return fr;
  • } catch (FileNotFoundException e) {
  • throw new RuntimeException(e);//注释
  • }
  • }
  • }


注释部分是处理方式。
问题:
1.为什么这样处理呢?
解答:java异常处理机制是try{}catch(Exception e){}finally{//程序的出口,这个根据需求可以选择}。java运行时环境收到异常对象时,会寻找处理该异常对象的catch块,如果找到合适的catch块并把该异常对象交给该catch块处理,那这个过程称为捕获异常;如果java运行时环境找不到捕获异常的catch块,则运行时环境终止,java程序也将退出。
2.这样throw出一个异常和在方法上throws异常有什么不同吗?
解答:throw代表一个动作,进行抛出异常,程序本身可以catch代码块中捕捉该异常。throws异常一般用在方法开始,进行声明,只是进行抛出不做任何处理~!不推荐使用。
3.如果catch住,不throw,只是打印提示信息呢?
解答:已经catch住了,根据需求判断时候抛出异常,throw一般在可能出现的异常很多使用,在后续的catch代码块中进行相应的代码处理~
4.一般这样的异常,该怎样处理?三种处理方式该符合选择?
解答:如上述~!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马