使用检测异常和不可检测异常:
1.在一般情况下,使用检测异常还是非检测异常的判断标准是客户端(调用者)能够处理它们。
像JDBC的SQLException是检测异常,把它设计成checked exception,不一定是合理,因为大多数情况下,调用者是无法处理的。当然有一种情况,调用者可以这样处理:它捕获SQLException,然后给用户提示:数据库执行失败,这也是一种处理方式。但是大多数情况下,这种异常是无法处理的,对这种大多数情况知道调用者无法处理的异常,应该被声明为unChecked Exception的。当某些情况调用者需要处理时,仍然可以捕获它进行处理,这样反而比较灵活。
对于一些业务异常,调用者可以处理它们,应该需要将它们设计成checked exception,如
DuplicatedUserException:用户注册时,选择了和别人重名的UserID;
LackOfBalanceException:用户提款时,余额不足。
等等
2.异常是抛出还是不要抛出
在很多程序中,捕获了异常,并把异常信息隐藏掉,是异常代码书写的反模式,调用者如果确定无法处理它,还是尽量抛出比较合理,异常信息无端地被忽略,对于调用者发现错误和调式都是不利的。笔者经常碰到这类代码,给笔者的调式带来了极大的不便。不仅如此,调用者调用你的代码时,本来可以处理的异常也被你给忽略了,所以在异常处理的时候,抛出还是不要抛出的标准很简单,那就是你的代码能不能处理它们,否则不要轻易捕获。
好文参考:
http://fluagen.blog.51cto.com/146595/38630/
分享到:
相关推荐
- `Exception`又分为`Checked Exception`(如IOException)和`RuntimeException`(如NullPointerException)。 - `Checked Exception`需要在编译期间显式处理,可以通过try-catch或throws声明。 3. **集合类**: ...
首先,Java异常可以分为两大类:检查性异常(Checked Exceptions)和运行时异常(Unchecked Exceptions)。检查性异常,如IOException、SQLException,通常在编译期间就需要处理,程序员必须显式地捕获或声明抛出。...
文件片段还提到了一些Java的核心类库,如`java.lang.Object`、`java.lang.Throwable`、`java.lang.Exception`、`java.lang.RuntimeException`、`java.lang.Non_RuntimeException`等。这里提到了Java的基本类型层次...
- **异常分类**:Java中的异常分为两大类:运行时异常(Runtime Exception)和非运行时异常(Non-Runtime Exception)。 - **运行时异常**:通常不需要显式捕获或声明抛出,由JVM自动处理。 - **非运行时异常**:...
- 异常的分类:检查异常(Checked Exception)和运行时异常(Unchecked Exception)。 - `try-catch-finally` 块的使用和理解。 - `throw` 和 `throws` 关键字的区别。 4. **垃圾回收与内存管理**: - 垃圾回收...
- 异常的分类:检查型异常(checked exception)和运行时异常(runtime exception)。 - try-catch-finally语句块的使用。 - throws和throw关键字的区别。 - 自定义异常的创建和使用。 6. **IO流**: - 字节流...
8)....Added: Exception line highlighting in disassember view in EurekaLog exception dialog and Viewer 9)....Added: Detection/logging Delphi objects in disassembly view 10)..Added: Support for multi-...
在Java中,异常是程序运行时出现的错误,分为两种主要类型:检查性异常(Checked Exception)和运行时异常(Runtime Exception)。检查性异常是那些在编译时就需要处理的异常,例如IOException、SQLException等,...
异常(Exception)在Java中被分为两类:执行异常(RuntimeException)和检查异常(Checked Exceptions)。执行异常,又称为运行时异常,是程序运行过程中可能出现的错误,如算术异常(ArithmeticException)、数组...
list (if present) is now obtained and also checked for an ID match. Implemented additional support for the PCI _ADR execution: upsearch until a device scope is found before executing _ADR. This ...
- 异常分类:区分checked异常(继承自Exception)和unchecked异常(继承自RuntimeException),合理抛出和捕获。 - try-catch-finally语句:确保finally块中的资源清理代码总是执行。 - 嵌套异常处理:理解如何...
Solving Non-System Font Problems Coloring Your Controls Modifying Common Dialogs The Windows Common Dialog Templates Explorer Style Boxes Changing Behavior Adding Controls More Advanced ...
- FIX: In the method TFlexPanel.ResizeSelection exception occurred when the number of selected items changed while the method was running. - ADD: Added the method TFlexControl.DoNeedHint - allows ...
VCLZip Native Delphi Zip/UnZip Component! (VCLZip Lite: Version 2.23 April 14th, 2002) (VCLZip Pro: Version 3.10 Buid 1 - November 25th, 2007) IMPORTANT: If installing the registered version, ...
o Fixed bug: In rare cases, exception window may appear when starting CurrPorts. * Version 1.50: o Added 'Display Port In Address' option. When this option is checked, the addresses will be ...
- fix for rangecheck exception with paintpages array - fix for footer and page mirror - doubleclick word selection now stops at NL - Workaround for Windows Spooler problems - some images would get ...
集合了 所有的 Unix命令大全 ...telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss ... 各个 shell 可互相切换 ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ ... 命令和参数之间必需用空格隔...