`

checked exception还是non checked exception

 
阅读更多

使用检测异常和不可检测异常:

 

1.在一般情况下,使用检测异常还是非检测异常的判断标准是客户端(调用者)能够处理它们。

 

像JDBC的SQLException是检测异常,把它设计成checked exception,不一定是合理,因为大多数情况下,调用者是无法处理的。当然有一种情况,调用者可以这样处理:它捕获SQLException,然后给用户提示:数据库执行失败,这也是一种处理方式。但是大多数情况下,这种异常是无法处理的,对这种大多数情况知道调用者无法处理的异常,应该被声明为unChecked Exception的。当某些情况调用者需要处理时,仍然可以捕获它进行处理,这样反而比较灵活。

 

对于一些业务异常,调用者可以处理它们,应该需要将它们设计成checked exception,如

DuplicatedUserException:用户注册时,选择了和别人重名的UserID;

LackOfBalanceException:用户提款时,余额不足。

等等

 

2.异常是抛出还是不要抛出

在很多程序中,捕获了异常,并把异常信息隐藏掉,是异常代码书写的反模式,调用者如果确定无法处理它,还是尽量抛出比较合理,异常信息无端地被忽略,对于调用者发现错误和调式都是不利的。笔者经常碰到这类代码,给笔者的调式带来了极大的不便。不仅如此,调用者调用你的代码时,本来可以处理的异常也被你给忽略了,所以在异常处理的时候,抛出还是不要抛出的标准很简单,那就是你的代码能不能处理它们,否则不要轻易捕获。

 

 

 

好文参考:

http://fluagen.blog.51cto.com/146595/38630/

分享到:
评论

相关推荐

    Java面试题 .docx

    - `Exception`又分为`Checked Exception`(如IOException)和`RuntimeException`(如NullPointerException)。 - `Checked Exception`需要在编译期间显式处理,可以通过try-catch或throws声明。 3. **集合类**: ...

    JavaExceptionDemo

    首先,Java异常可以分为两大类:检查性异常(Checked Exceptions)和运行时异常(Unchecked Exceptions)。检查性异常,如IOException、SQLException,通常在编译期间就需要处理,程序员必须显式地捕获或声明抛出。...

    JAVA讲义第6章.pdf

    文件片段还提到了一些Java的核心类库,如`java.lang.Object`、`java.lang.Throwable`、`java.lang.Exception`、`java.lang.RuntimeException`、`java.lang.Non_RuntimeException`等。这里提到了Java的基本类型层次...

    javatestjavatestjavatestjavatestjavatestjavatest

    - **异常分类**:Java中的异常分为两大类:运行时异常(Runtime Exception)和非运行时异常(Non-Runtime Exception)。 - **运行时异常**:通常不需要显式捕获或声明抛出,由JVM自动处理。 - **非运行时异常**:...

    很多java面试题目题目,pdf清晰版电子书。很不错

    - 异常的分类:检查异常(Checked Exception)和运行时异常(Unchecked Exception)。 - `try-catch-finally` 块的使用和理解。 - `throw` 和 `throws` 关键字的区别。 4. **垃圾回收与内存管理**: - 垃圾回收...

    java面试题精选一

    - 异常的分类:检查型异常(checked exception)和运行时异常(runtime exception)。 - try-catch-finally语句块的使用。 - throws和throw关键字的区别。 - 自定义异常的创建和使用。 6. **IO流**: - 字节流...

    EurekaLog_7.5.0.0_Enterprise

    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 throw和throws使用区别分析

    在Java中,异常是程序运行时出现的错误,分为两种主要类型:检查性异常(Checked Exception)和运行时异常(Runtime Exception)。检查性异常是那些在编译时就需要处理的异常,例如IOException、SQLException等,...

    java学习笔记之3(精华哦)

    异常(Exception)在Java中被分为两类:执行异常(RuntimeException)和检查异常(Checked Exceptions)。执行异常,又称为运行时异常,是程序运行过程中可能出现的错误,如算术异常(ArithmeticException)、数组...

    acpi控制笔记本风扇转速

    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 ...

    使用Java高级实用技术

    - 异常分类:区分checked异常(继承自Exception)和unchecked异常(继承自RuntimeException),合理抛出和捕获。 - try-catch-finally语句:确保finally块中的资源清理代码总是执行。 - 嵌套异常处理:理解如何...

    Professional.MFC.with.VC6

    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 ...

    FlexGraphics_V_1.79_D4-XE10.2_Downloadly.ir

    - 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 pro v3.10.1

    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 ...

    WPTools.v6.29.1.Pro

    - 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 ...

    2009 达内Unix学习笔记

    集合了 所有的 Unix命令大全 ...telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss ... 各个 shell 可互相切换 ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ ... 命令和参数之间必需用空格隔...

Global site tag (gtag.js) - Google Analytics