Java中的异常包装是什么? 在异常处理中有什么用? 它与异常传播有何不同?

Exception wrapping is when you catch an exception, wrap it

in a different exception and throw that exception.

Here is an example:

try{

dao.readPerson();

} catch (SQLException sqlException) {

throw new MyException("error text", sqlException);

}

来源:http://tutorials.jenkov.com/java-exception-handling/exception-wrapping.html

另一方面

Exception Propagation: An exception is first thrown from the top of

the stack and if it is not caught, it drops down the call stack to the

previous method, if not caught there, the exception again drops down to

the previous method, and so on until they are caught or until they

reach the very bottom of the call stack.

来源:http://www.javatpoint.com/exception-propagation

您知道哪种情况在哪种情况下有用吗? 什么是" MyException"。 它是一个自定义异常还是它也可以是Java检查的异常?

@BoratSagdiyev感谢您的投票,我不知道您在此答案中发现了什么错误,迫使您单击该按钮。 如果您有任何疑问,您可以要求评论,而不是挑战我所知道的和我所不知道的.........而且我看到您在这里评论的每个答案都在这里被复制。 .... OP来到这里是因为他无法在其他任何地方找到正确的答案。 如果有人提供答案,那没有人受伤……

我认为Neeraj的答案是正确的。作为补充,我认为一个特别好的案例是通过抽象异常来管理抛出的异常数量。为了扩展Neeraj的示例:

class Manager {

public void sendPerson() throws ManagerException {

try{

Person person = dao.readPerson();

Socket socket = getSocket();

OutputStream os = socket.getOutputStream();

String personJson = objectMapper.writeValueAs(person);

os.write(personJson);

} catch (SQLException | SocketException | OutputStreamException | SerializationException e) {

throw new ManagerException("error text", e);

}

}

}

这样,客户端只需要执行以下操作:

try {

manager.sendPerson();

} catch (ManagerException e) {

// Handle fail by manager

}

而不用担心管理器中可能出问题的详细信息。

一个用例是将已检查的异常转换为运行时异常,反之亦然。

或可能只是一个命名问题。假设您在代码中的某个时刻捕获了SQLException,但是您可以推断出这是因为用户未登录。然后您可以捕获它并抛出自己的自定义NotLoggedInException。

这个答案是从这里获得的:http://www.javapractices.com/topic/TopicAction.do?Id=77

Data can be stored in various ways, for example:

a relational database

text files

on the web (for example, fetching the weather forecast from a web site)

If the storage method changes, then the low level Exception objects thrown by the data access layer can also change. For example, when the data store is moved from text files to a relational database, IOException is replaced with SQLException.

In order to prevent such a change from propagating to higher layers, one can wrap such low level Exceptions in a generic"data exception" wrapper, designed exclusively to protect the higher layers from such changes.

现在我们将看到一个示例...

public class ResourceLoader {

public loadResource(String resourceName) throws ResourceLoadException {

Resource r;

try {

r = loadResourceFromDB(resourceName);

}

catch (SQLException e) {

throw new ResourceLoadException("SQL Exception loading resource"

+ resourceName:" + e.toString());

}

}

}

loadResource的实现合理地使用了异常。通过抛出ResourceLoadException而不是SQLException(或实现引发的任何其他异常),loadResource对调用者隐藏了实现,从而使更改实现变得更容易,而无需修改调用代码。此外,loadResource()引发的异常-ResourceLoadException-与它执行的任务直接相关:加载资源。低级异常SQLException和IOException与该方法执行的任务没有直接关系,因此可能对调用方没有太大帮助。此外,此包装保留了原始异常的错误消息,因此用户知道为什么无法加载资源(可能是由于连接错误或不正确的用户名或密码),并可以采取纠正措施。

这个答案来自这里-javapractices.com/topic/TopicAction.do?Id=77

java exception 包_什么是Java中的异常包装?相关推荐

  1. java ear包_简单介绍Java 的JAR包、EAR包、WAR包区别

    原标题:简单介绍Java 的JAR包.EAR包.WAR包区别 WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件.War专 ...

  2. java memorystream 包_存储在MemoryStream中的裁剪图像中心

    我有一个图像上传表格,存储两种尺寸的图像:大图像和缩略图图像 . 对于缩略图图像,我试图从中心裁剪图像并重新调整大小为:30px x 30px . 这是我的代码: private static Bit ...

  3. java exception信息_可能通过Java Exceptions暴露敏感信息?

    当信任边界交叉时,是否可以通过 Java Exceptions公开敏感的应用程序或系统信息? 我的意思是,不仅在理论上,而且如果在真实环境中发生这种情况. 例如java.io.FileNotFound ...

  4. java 二进制 包_如何用JAVA把内存里的二进制文件打包成ZIP包

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.ut ...

  5. java中数学公式要引用什么包_五、java数学函数

    java.lang包中存放了大量数学函数,并且这些方法在类Math中是作为static方法出现的,所以引用一个特定的函数,只需将类Math和一个圆点写在要使用的方法前.如方法sqrt()是用来计算存储 ...

  6. java 异常处理线程_转:Java子线程中的异常处理(通用)

    在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally ...代码块就可以了.那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相 ...

  7. java 字符串包_包java字符串

    Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...

  8. JAVA类思维_面向对象思维 Java中的类和对象及其应用

    一.面向过程与面向对象 面向过程: 从事务执行者的角度思考问题,我该干什么  重点在过程----事务流程 面向对象: 从事务的指挥者角度思考问题,我应该找谁干什么  重点在对象 面向对象的优点: 1. ...

  9. java 添加注解_你知道Java中的package-info的作用吗?

    package-info.java对于日常业务开发的开发者来说,可能有点陌生,如果我们再项目中创建一个package-info.java,你会发现该类只有一个packge,如下 我们无法在该java文 ...

最新文章

  1. Openstack数据库初始化时为何要重复授权
  2. EXTJS 常用控件的使用
  3. mysql命令行语句_MySql命令行命令和SQL语句
  4. 数据库的几种联结,union,union all ,inner jion ,left jion,right jion ,cross jion
  5. Android(java)学习笔记158:多线程断点下载的原理(JavaSE实现)
  6. 为什么发了个博客分分钟被各种网站花式转载=。=而不通知我
  7. OpenStack日志搜集分析之ELK
  8. 算法: 239. 滑动窗口的最大值
  9. OFDM链路自适应算法 注水算法简单c++实现
  10. 为什么我的淘宝店铺动态评分清零了?
  11. kali开机密码破解
  12. 华为超级技术大牛的十年经验总结
  13. linux windows 共享 smbd 部署
  14. relative的使用
  15. Flutter 适配安卓异形屏幕
  16. java中工具插件列表
  17. elementui的使用问题
  18. 工作之余,请IT人员开怀大笑吧
  19. 气象学需要计算机知识吗,没毕业就被签走的铁饭碗专业 气象学
  20. 断言(assert)方法

热门文章

  1. 第二阶段冲刺之站立会议1
  2. PHP array_diff_assoc
  3. 完美 全兼容 解决 文字两端对齐 justify 中文姓名对齐
  4. Uva 10557 XYZZY
  5. iOS深入学习(Block全面分析)
  6. App设计之路——WebApp浅谈
  7. 最新Android ADT, SDK, SDK_tool等官方下载说明(及时更新)
  8. Android调用.net的webservice服务器接收参数为空的情况
  9. laravel数组转换为字符串_LeetCode刷题实战108:将有序数组转换为二叉搜索树
  10. c 获取char*的长度_C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏!...