程序为捕获的异常而失败,系统会自动打印该异常的堆栈轨迹,在堆栈中包含该异常的字符串表示法(它的toString方法结果,包含类名,消息细节), 在这种情况下,我们有时看到一长串类名和自动生成的错误消息无从下手,究竟错误出现在了哪里?

这种情况的发生其实和Object的toString方法类似,我输出一个对象,调用你的toString方法显示出来的东西没有价值,要你何用?我程序出现异常,返回的信息不足以让我找到bug,要你何用?

因此,为了捕获到异常,我们应该把异常中有价值的细节信息打印出来
例如:
IndexOutOfBoundsException中并不是有String的构造器,而是有这样的构造器。

    public IndexOutOfBoundsException (int lowerBound, int upperBound, int index) {  super("lowerBound: " + lowerBound + "upperBound:  " + upperBound + "index:  " + index);  this. lowerBound = lowerBound;  this. upperBound = upperBound;  this. index = index;  }  

Java平台没有广泛使用这种做法,但是这种做法值得推荐,原因很简单,它能够让程序员易于抛出异常捕获失败。
这也与toString方法相似,认真写好了,以后用起来就很方便,是良好的编程习惯。

Effective Java之在细节消息中包含能捕获失败的消息(六十三)相关推荐

  1. 在细节消息中包含能够捕获失败的信息(63)

    2019独角兽企业重金招聘Python工程师标准>>> 程序由于未被捕获异常失败时,系统会自动打印该异常的堆栈轨迹 包含异常的字符串表示法(toString) 通常包含异常的类名,以 ...

  2. 编写一个Java程序,在程序中包含一个Employee类,Employee类包含name、age、salary三个成员变量

    编写一个Java程序,在程序中包含一个Employee类,Employee类包含name.age.salary三个成员变量,Employee类中有4个构造方法,分别为无参的.带一个参数用来对name属 ...

  3. java编写salary函数_编写一个Java程序,在程序中包含一个Employee类,Employee类包含name、age、salary三个成员变量...

    编写一个Java程序,在程序中包含一个Employee类,Employee类包含name.age.salary三个成员变量,Employee类中有4个构造方法,分别为无参的.带一个参数用来对name属 ...

  4. java runnable 异常_JAVA 线程中的异常捕获

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

  5. java spring redis订阅_spring中订阅redis键值过期消息通知

    1.首先启用redis通知功能(ubuntu下操作): 编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知): notify-keyspace-events Ex 或者登 ...

  6. java url特殊字符转义字符_URL中包含有特殊字符,进行转义

    String temp = URLEncoder.encode(json); URL中的特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的 ...

  7. Effective Java~46. 优先选择Stream 中无副作用的函数

    纯函数(pure function)的结果仅取决于其输入:它不依赖于任何可变状态,也不更新任何状态. 坏味道 // Uses the streams API but not the paradigm- ...

  8. Effective Java之在公有类中使用访问方法而非公有域(十四)

    1.对于公有类来说,如果类可以在它所在的包的外部进行访问,就提供访问方法,以保留将来改变该类的内部表示法的灵活性. 如果公有域暴露了他的数据域,要想在将来改变它的内部表示法是不可能的,因为公有类的客户 ...

  9. 《Effective Java》读书笔记八(异常)

    No57 只针对异常的情况才使用异常 异常应该只用于异常的情况下,它们永远不应该用于正常的控制流. No58 对可恢复的情况使用受检异常,对编程错误使用运行时异常 Java程序设计语言提供了三种可抛出 ...

最新文章

  1. Redis 中的集合类型是怎么实现的?
  2. MySQL设置数据库及表的字符集
  3. 离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进
  4. Vr-Vantage之场景与环境
  5. 软件构造学习笔记-实验4
  6. Android---53---多线程下载
  7. 异步编程模型(C#5.0系列)
  8. 追影windows7 虚拟4桌面
  9. The Block披露员工持币情况,UNI等5个币种持有人数最多
  10. layui 滚动加载与ajax,909422229_layUi关于ajax与loading问题
  11. Mozilla Thimble,在线html,javascript编辑器
  12. 【面向对象】第三单元规格化设计总结——JML
  13. 同时合并多个视频,并添加转场特效
  14. 【数字IC设计/FPGA】推挽输出和开漏输出
  15. 21天打卡挑战 - 经典算法之折半查找
  16. 如何将所有中文的文件名称翻译成日语
  17. Win7下,使用VM虚拟机,安装苹果Mac OS经验分享
  18. 基于cmake配置使用CGAL
  19. 关于element ui中autofocus属性失效的问题
  20. SigFit—光—机—热耦合分析软件

热门文章

  1. Python编写简易木马程序
  2. 原创内容屡屡被盗?从源头对资源盗用说NO
  3. Go Modules 的智障版本选择
  4. linux下使用C++操作mysql
  5. LiveVideoStack线上分享第四季(十):图像视频降噪的现在与未来——从经典方法到深度学习...
  6. ffplay.c学习-2-数据读取线程
  7. 哈希表及哈希冲突解决办法
  8. MNIST数据可视化
  9. 安装Xen Server创建虚拟机
  10. Intel Edision安装Android Things