Jav*_*ser 23 java exception-handling exception runtimeexception checked-exceptions
什么是运行时异常以及什么是已检查/未检查异常以及错误/异常之间的区别.为什么这么多类型?相反,Java可能只是遵循一个简单的设计(只是尝试/捕获所有类型)来处理程序中的异常情况?
Raz*_*zib 34
由于我是一名新的Java开发人员,因此在区分和处理不同类型的异常时也遇到了一些困难.这就是为什么我在这个主题上做了一个简短的说明,每当我感到困惑时,我都会经历它.这里是Throwable类层次结构的图像:

[图片由JavaTpoint提供 ].
有三个重点班在这里要记住:Throwable,Exception和Error.这些类Exception中可以分为两种类型:"Checked Exception"和"Unchecked Exception".
检查异常:
Throwable除了RuntimeException和之外,这些是扩展的类Error.try/catch或在函数签名中指出throws它们并强制我们在调用者中处理它们.IOException,SQLException,等.未经检查的例外情况:
RuntimeException称为未经检查的异常.ArithmeticException,NullPointerException,ArrayIndexOutOfBoundsException,等.ArithmeticException,这可以通过对除数的简单检查来避免.同样,我们可以NullPointerException通过简单地检查引用来避免:if (object != null)甚至使用更好的技术.错误:
Error指的是一个无法处理的不可恢复的情况try/catch.OutOfMemoryError,VirtualMachineError,AssertionError,等.为什么这么多类型?
除了Stephen C的回答我想说:异常处理在Java中是一个相对昂贵的操作.我们不应该把所有特殊情况都放在try/catch一块.过度使用try/catchs可能会妨碍程序性能.
总之,Exception应尽可能以编程方式处理s.另一方面,我们无法处理Errors,因此这可能是为什么有许多类型的异常的一些逻辑原因.
Tof*_*eer 33
除了所有例外,Throwable都是最重要的.在Throwable下面你有错误和异常.在Exception下面你有RuntimeException.
Java有两种类型的例外 - 已选中和未选中.检查的异常由编译器强制执行(您必须在throws子句中声明它们并最终捕获它们).对throws子句中的捕获或声明不强制执行未经检查的异常.
(有争议的部分答案)
存在Throwable,因此所有异常类型都有父级.你永远不应该声明你扔掉了Throwable并且永远不会抓住它(除非你真的真的知道你在做什么).
存在错误表示运行时环境存在问题,程序可能无法从中恢复,例如格式错误的类文件或内存不足的VM.除非你真的知道自己在做什么,否则不应该发现错误.
异常作为所有非程序员错误的根存在(请参阅RuntimeException以获取此异常),例如由于磁盘已满而无法创建文件.你不应该抛出,抛出或捕获异常.如果您必须捕获异常,请确保您知道自己在做什么.
存在RuntimeException以指示所有程序员错误,例如超过数组末尾或调用null对象上的方法.这些是你应该修复的东西,这样它们就不会抛出异常 - 这表明你,程序员,搞砸了代码.除非你知道自己在做什么,否则你不应该抓住这些.
| 归档时间: |
|
| 查看次数: |
17450 次 |
| 最近记录: |