mirror of
https://github.com/sjsdfg/effective-java-3rd-chinese.git
synced 2025-03-29 21:50:14 +08:00
parent
ac45bec135
commit
60378d23d4
@ -12,7 +12,7 @@ try {
|
||||
}
|
||||
```
|
||||
|
||||
这段代码有什用,看起来根本不明显,这正是它没有真正被使用的原因(详见 67 条)。事实证明,作为一个要对数组元素进行遍历的实现方式,它的构想是十分拙劣的。当这个循环企图访问数组边界之外的第一个数组元素的时候,使用 try-catch 并且忽略 `ArrayIndexOutOfBoundsException` 异常的手段来达到终止无限循环的目的。假定它与数组循环的标准模式是等价的,对于它的标准模式每个 Java 程序员都可以一眼辨认出来:
|
||||
这段代码是干什么的?看起来根本不明显,这正是它没有真正被使用的原因(详见 67 条)。事实证明,作为一个要对数组元素进行遍历的实现方式,它的构想是十分拙劣的。当这个循环企图访问数组边界之外的第一个数组元素的时候,使用 try-catch 并且忽略 `ArrayIndexOutOfBoundsException` 异常的手段来达到终止无限循环的目的。假定它与数组循环的标准模式是等价的,对于它的标准模式每个 Java 程序员都可以一眼辨认出来:
|
||||
|
||||
```java
|
||||
for ( Mountain m : range )
|
||||
|
@ -53,7 +53,7 @@ class HigherLevelException extends Exception {
|
||||
}
|
||||
```
|
||||
|
||||
大多数标准的异常都有支持链的构造器。对于没有支持链的异常,可以利用 Throwable 的 initCause 方法设置原因。异常链不仅让你可以通过程序(用 getCause)访问原因,还可以将原因的堆战轨迹集成到更高层的异常中。
|
||||
大多数标准的异常都有支持链的构造器。对于没有支持链的异常,可以利用 Throwable 的 initCause 方法设置原因。异常链不仅让你可以通过程序(用 getCause)访问原因,还可以将原因的堆栈轨迹集成到更高层的异常中。
|
||||
|
||||
**尽管异常转译与不加选择地从低层传递异常的做法相比有所改进,但是也不能滥用它。** 如有可能,处理来自低层异常的最好做法是,在调用低层方法之前确保它们会成功执行,从而避免它们抛出异常。有时候,可以在给低层传递参数之前,检查更高层方法的参数的有效性,从而避免低层方法抛出异常。
|
||||
|
||||
|
@ -6,11 +6,11 @@
|
||||
|
||||
对安全敏感的信息有一条忠告。由于在诊断和修正软件问题的过程中,许多人都可以看见堆栈轨迹, **因此千万不要在细节消息中包含密码、密钥以及类似的信息!**
|
||||
|
||||
虽然在异常的细节消息中包含所有相关的数据是非常重要的,但是包含大量的描述信息往往没有什么意义。堆栈轨迹的用途是与源文件结合起来进行分析,它通常包含抛出该异常的确切文件和行数,以及堆校中所有其他方法调用所在的文件和行数。关于失败的冗长描述信息通常是不必要的,这些信息可以通过阅读源代码而获得。
|
||||
虽然在异常的细节消息中包含所有相关的数据是非常重要的,但是包含大量的描述信息往往没有什么意义。堆栈轨迹的用途是与源文件结合起来进行分析,它通常包含抛出该异常的确切文件和行数,以及堆栈中所有其他方法调用所在的文件和行数。关于失败的冗长描述信息通常是不必要的,这些信息可以通过阅读源代码而获得。
|
||||
|
||||
异常的细节消息不应该与“用户层次的错误消息”混为一谈,后者对于最终用户而言必须是可理解的。与用户层次的错误消息不同,异常的字符串表示法主要是让程序员或者网站可靠性工程师用来分析失败的原因。因此,信息的内容比可读性要重要得多。用户层次的错误消息经常被本地化,而异常的细节消息则几乎没有被本地化。
|
||||
|
||||
为了确保在异常的细节消息中包含足够的失败- 捕捉信息, 一种办法是在异常的构造器而不是字符串细节消息中引人这些信息。然后,有了这些信息,只要把它们放到消息描述中,就可以自动产生细节消息。例如 `IndexOutOfBoundsException` 使用如下构造器代替 `String` 构造器:
|
||||
为了确保在异常的细节消息中包含足够的失败- 捕捉信息, 一种办法是在异常的构造器而不是字符串细节消息中引入这些信息。然后,有了这些信息,只要把它们放到消息描述中,就可以自动产生细节消息。例如 `IndexOutOfBoundsException` 使用如下构造器代替 `String` 构造器:
|
||||
|
||||
```java
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user