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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 水蓝 中级黑马   /  2014-3-18 11:54  /  2004 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

之前,看异常处理部分的视频的时候老师有说过,在接口实现过程中,为了让异常不污染接口。所以通常接口的部分异常可以用RuntimeException封装。

如下代码:
  1. import java.io.IOException;
  2. import java.sql.SQLException;

  3. /**
  4. * 用于获取数据长的接口
  5. * @author CBY
  6. *
  7. */
  8. interface MyDataSourse {
  9.         //获取数据
  10.         String getData();       
  11. }
  12. /**
  13. * 从数据库获取数据
  14. * @author CBY
  15. *
  16. */
  17. class MyDataSourseFromDB implements MyDataSourse {
  18.         @Override
  19.         public String getData() {
  20.                 try {
  21.                         //与数据库交互,可能上抛SQLException异常
  22.                         throw new SQLException("数据库异常");
  23.                 } catch (SQLException e) {
  24.                         //为了不污染接口,需要封装成RuntimeException的子类异常
  25.                         throw new RuntimeException(e.getMessage(),e);
  26.                 }
  27.         }
  28. }
  29. /**
  30. * 从网络获取数据
  31. * @author CBY
  32. *
  33. */
  34. class MyDataSourseFromNet implements MyDataSourse {
  35.         @Override
  36.         public String getData() {
  37.                 try {
  38.                         //与网络交互,可能上抛IOException异常
  39.                         throw new IOException("网络异常");
  40.                 } catch (IOException e) {
  41.                         //为了不污染接口,需要封装成RuntimeException的子类异常
  42.                         throw new RuntimeException(e.getMessage(),e);
  43.                 }
  44.         }
  45. }
复制代码
这些实现,对上层调用者来说,应该是透明的。
那我如何能让上层调用者知道,存在这种异常上抛的情况呢?


评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

3 个回复

倒序浏览
你的上层调用者,再调用这个方法的时候,编译器就会提醒捕获或者继续抛出该异常的。
回复 使用道具 举报
Engle 发表于 2014-4-2 10:44
你的上层调用者,再调用这个方法的时候,编译器就会提醒捕获或者继续抛出该异常的。 ...

对于上抛的RuntimeException及其子类,编译器是不提示的吧。
回复 使用道具 举报
蒋珍珍 来自手机 中级黑马 2014-4-2 12:33:35
板凳
既然是为了不污染接口,那么子类覆盖的方法也不能抛出异常,必须try处理;
然后方法中若是捕获到了异常,仍没处理,那么只有抛出运行时异常才可以不用在函数上声明;
而运行时异常编译器不检查,对于这类异常一般不处理,那么程序就直接停止了,上层就不会知道了。
也就是说可能上抛的这个异常“为了不污染接口“并没有上抛。这是我的理解

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

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