为什么 Java 中要使用 Checked Exceptions
来源:互联网 发布:业务元数据 编辑:程序博客网 时间:2024/05/24 03:13
正方代表 James Gosling
http://www.artima.com/intv/solid.html
反方代表 Anders Hejlsberg
http://www.artima.com/intv/csdes.html
中文版:http://www.csdn.net/develop/article/22/22612.shtm
两位都是大师级的人物,观点的碰撞非常精彩。
我个人更倾向于 James Gosling 的观点,即稳定性更加重要。C++ 程序的后期维护成本远远高于 Java 程序,更不要说前期的开发成本了。Java 要担负企业级的核心应用(HA 24X7),没有这些系统级的保证是不可能的。C++、Delphi 都中没有 Checked Exceptions,所以 Anders 设计 C# 时也没有加 Checked Exceptions。当然我并不是说没有 Checked Exceptions 就一定不能写出稳定的程序(你说,我就是比你牛,我用汇编语言都能写出稳定的程序!),但是显然使用 Java 语言写出稳定的程序比用 C++ 更容易。Checked Exceptions 就是编程语言所提供的系统级保证,能否用好是你自己的问题了,并不象 Anders 说的那样严重。我觉得 Anders 大师对于企业级应用并没有太多的概念。James Gosling 看了 C# 的设计后觉得不过如此。当然这只是大师本人的观点,我们未必一定要接受了。
我没有资格评论大师们的观点,但是我知道绝大多数的Java程序员根本就没有领悟“Exception”的真正用处。他们就是把Exception当做异常来理解,没有明白Exception实际上代表了一个UseCase中的异常流的处理。
在使用UseCase来描述一个场景的时候,有一个主事件流和n个异常流。异常流可能发生在主事件流的过程,而try语句里面实现的是主事件流,而catch里面实现的是异常流,在这里Exception不代表程序出现了异常或者错误,Exception只是面向对象化的业务逻辑控制方法。如果没有明白这一点,那么我认为并没有真正明白应该怎么使用Java来正确的编程。
而我自己写的程序,会自定义大量的Exception类,所有这些Exception类都不意味着程序出现了异常或者错误,只是代表非主事件流的发生的,用来进行那些分支流程的流程控制的。例如你往权限系统中增加一个用户,应该定义1个异常类,UserExistedException,抛出这个异常不代表你插入动作失败,只说明你碰到一个分支流程,留待后面的catch中来处理这个分支流程。传统的程序员会写一个if else来处理,而一个合格的OOP程序员应该有意识的使用try catch 方式来区分主事件流和n个分支流程的处理,通过try catch,而不是if else来从代码上把不同的事件流隔离开来进行分别的代码撰写。
总之 Exception <> 异常
BTW:我是支持BE和JG的观点的。我以前在接触C#的时候,就很奇怪C#的这一点了,Anders有他的理由,但是我认为一个良好的面向对象的软件是应该强制使用Exception的。
http://www.iteye.com/topic/2038
1.小范围检查,就近能解决的,不使用checkException
2.大范围异常流程,使用checkException,跨类,跨dll需要,甚至于跨进程
- 为什么Java中要使用Checked Exceptions
- 为什么 Java 中要使用 Checked Exceptions
- 为什么 Java 中要使用 Checked Exceptions
- Checked vs Unchecked Exceptions in Java
- 避免在Java中使用Checked Exception
- 避免在Java中使用Checked Exception
- 避免在Java中使用Checked Exception
- 避免在Java中使用Checked Exception
- 避免在Java中使用Checked Exception
- 避免在Java中使用Checked Exception .
- Java 中的两种异常(Checked exceptions 和 Unchecked exceptions)
- 如何避免在Java中使用Checked Exception
- 如何避免在Java中使用Checked Exception
- The Trouble with Checked Exceptions
- Java中常见的Exceptions
- java中为什么把Checked Exception翻译成受检的异常?
- java中为什么要使用迭代器
- Java中为什么要使用内部类
- Java死锁问题
- 向量范数
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- CocoaPods安装使用及配置私有库
- mac下cocoaPods的安装和使用
- 为什么 Java 中要使用 Checked Exceptions
- xcode编译器问题——参数类型识别错误,EXC_BAD_ACCESS
- cer和pfx区别
- Learning Python(7)--Someting Useful
- 矩形覆盖
- iOS NSDictionary、NSData、JSON数据类型相互转换
- Windows cannot be installed to this dis
- pointer-events:none;阻止区块被点击
- Win10开发:一个简单的MobileService