Effective Java之在细节消息中包含能捕获失败的消息(六十三)
程序为捕获的异常而失败,系统会自动打印该异常的堆栈轨迹,在堆栈中包含该异常的字符串表示法(它的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之在细节消息中包含能捕获失败的消息(六十三)相关推荐
- 在细节消息中包含能够捕获失败的信息(63)
2019独角兽企业重金招聘Python工程师标准>>> 程序由于未被捕获异常失败时,系统会自动打印该异常的堆栈轨迹 包含异常的字符串表示法(toString) 通常包含异常的类名,以 ...
- 编写一个Java程序,在程序中包含一个Employee类,Employee类包含name、age、salary三个成员变量
编写一个Java程序,在程序中包含一个Employee类,Employee类包含name.age.salary三个成员变量,Employee类中有4个构造方法,分别为无参的.带一个参数用来对name属 ...
- java编写salary函数_编写一个Java程序,在程序中包含一个Employee类,Employee类包含name、age、salary三个成员变量...
编写一个Java程序,在程序中包含一个Employee类,Employee类包含name.age.salary三个成员变量,Employee类中有4个构造方法,分别为无参的.带一个参数用来对name属 ...
- java runnable 异常_JAVA 线程中的异常捕获
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...
- java spring redis订阅_spring中订阅redis键值过期消息通知
1.首先启用redis通知功能(ubuntu下操作): 编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知): notify-keyspace-events Ex 或者登 ...
- java url特殊字符转义字符_URL中包含有特殊字符,进行转义
String temp = URLEncoder.encode(json); URL中的特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的 ...
- Effective Java~46. 优先选择Stream 中无副作用的函数
纯函数(pure function)的结果仅取决于其输入:它不依赖于任何可变状态,也不更新任何状态. 坏味道 // Uses the streams API but not the paradigm- ...
- Effective Java之在公有类中使用访问方法而非公有域(十四)
1.对于公有类来说,如果类可以在它所在的包的外部进行访问,就提供访问方法,以保留将来改变该类的内部表示法的灵活性. 如果公有域暴露了他的数据域,要想在将来改变它的内部表示法是不可能的,因为公有类的客户 ...
- 《Effective Java》读书笔记八(异常)
No57 只针对异常的情况才使用异常 异常应该只用于异常的情况下,它们永远不应该用于正常的控制流. No58 对可恢复的情况使用受检异常,对编程错误使用运行时异常 Java程序设计语言提供了三种可抛出 ...
最新文章
- Redis 中的集合类型是怎么实现的?
- MySQL设置数据库及表的字符集
- 离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进
- Vr-Vantage之场景与环境
- 软件构造学习笔记-实验4
- Android---53---多线程下载
- 异步编程模型(C#5.0系列)
- 追影windows7 虚拟4桌面
- The Block披露员工持币情况,UNI等5个币种持有人数最多
- layui 滚动加载与ajax,909422229_layUi关于ajax与loading问题
- Mozilla Thimble,在线html,javascript编辑器
- 【面向对象】第三单元规格化设计总结——JML
- 同时合并多个视频,并添加转场特效
- 【数字IC设计/FPGA】推挽输出和开漏输出
- 21天打卡挑战 - 经典算法之折半查找
- 如何将所有中文的文件名称翻译成日语
- Win7下,使用VM虚拟机,安装苹果Mac OS经验分享
- 基于cmake配置使用CGAL
- 关于element ui中autofocus属性失效的问题
- SigFit—光—机—热耦合分析软件