bli*_*egz 27 c# java exception
我是一名C#开发人员,偶尔用Java编写代码.有人可以用简单的术语解释Java中检查的异常是什么以及为什么需要它?没有在C#中遇到过这个术语.
Mat*_*hen 57
已检查的异常是编译器要求您以某种方式处理的异常.
在Java中,checked异常是ThrowableS中的不是RuntimeException,Error或它们的一个子类.
Java设计者认为他们需要确保程序处理合理可能的异常.一个典型的例子是IOException.只要程序执行I/O,就有可能出现故障.磁盘可能已满,文件可能不存在,可能存在权限问题等.
因此,Java的设计使得程序必须以某种方式在语法上处理异常.这可能是一个catch块,或者以某种方式重新抛出异常.
C#没有检查异常.他们决定将此问题留给应用程序开发人员(面试).检查的异常是有争议的,因为它们可以使代码冗长,而开发人员有时会使用空的catch块来处理它们.此外,它可以是任意标准库方法抛出已检查的异常.例如,为什么不File.delete(新的Java 7 API以不同方式执行)抛出IOException?
Hejlsberg在该访谈中指出的另一个问题是可版本性.向throw子句添加已检查的异常会强制修改和重新编译使用该方法的所有代码.
在Java中,检查异常(正如Matthew Flaschen正确指出的那样)是编译器要求您处理的异常.这些是在函数定义上声明的异常(例如function bob() throws ImNotBobException { ... },调用该函数可能抛出该异常 - 例如,NumberFormatException在解析整数时,或者IOException在写入文件时).
但是,某些异常可能会从未知或意外的位置抛出,这些位置在每个级别上处理都是不切实际的,因此编译器不需要您处理这些异常.这些是未经检查的例外情况.它们可以从不声明抛出它们的各个地方抛出(通常是在该对象尚未初始化时尝试调用对象上的方法,即为null - 这将导致a NullPointerException.)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
12477 次 |
| 最近记录: |