在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。
Throwable 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
①.Exception(异常)是应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。在 EchoInput 类中,当试图调用 readLine 方法时,可能出现 IOException 异常。
Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
②.Error(错误)表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。
检查异常 和 未检查异常 的划分
Java中的异常分为两大类:
1.Checked Exception(非Runtime Exception)
2.Unchecked Exception(Runtime Exception)
运行时异常
RuntimeException类是Exception类的子类,它叫做运行时异常,Java中的所有运行时异常都会直接或者间接地继承自RuntimeException类。
Java中凡是继承自Exception,而不继承自RuntimeException类的异常都是非运行时异常。
一个try后面可以跟多个catch,但不管多少个,最多只会有一个catch块被执行。
对于非运行时异常(checked exception),必须要对其进行处理,否则无法通过编译。
处理方式有两种:
1.使用try..catch..finally进行捕获;
2.在产生异常的方法声明后面写上throws 某一个Exception类型,如throws Exception,将异常抛出到外面一层去。
对于运行时异常(runtime exception),可以对其进行处理,也可以不处理。推荐不对运行时异常进行处理。
扩展:错误和异常的区别(Error vs Exception)
1).java.lang.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。
java.lang.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。
2).Error和RuntimeException 及其子类都是未检查的异常(unchecked exceptions),而所有其他的Exception类都是检查了的异常(checked exceptions).
checked exceptions: 通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如FileNotFoundException, ParseException等。检查了的异常发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。
unchecked exceptions: 通常是如果一切正常的话本不该发生的异常,但是的确发生了。发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。从语言本身的角度讲,程序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不鼓励终端程序员这么做,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。 因此,面对Errors和unchecked exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。
RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。
处理RuntimeException的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。其他(IOException等等)checked异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
以上这篇Java_异常类(错误和异常,两者的区别介绍) 就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
问题内容: 我试图学习有关基本Java和不同类型的Throwables的更多信息,有人可以让我知道Exception和Errors之间的区别吗? 问题答案: 错误不应该被发现或处理(在极少数情况下除外)。异常是异常处理的基础。该Javadoc中解释说得好: 错误是Throwable的子类,它指示合理的应用程序不应尝试捕获的严重问题。大多数此类错误是异常情况。 查看一些的子类Error,并获取一些J
本文向大家介绍Java中错误和异常之间的区别,包括了Java中错误和异常之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解错误和异常之间的区别。 错误 它被分类为未检查类型。 它属于类'java.lang.error'。 无法从中恢复。 它不能在编译时发生。 错误的例子包括- 'OutOfMemoryError' ``IOError'' 例外 它可以分为未检查的异常和已检查的
本文向大家介绍Java中异常和错误之间的区别,包括了Java中异常和错误之间的区别的使用技巧和注意事项,需要的朋友参考一下 异常和错误都是Throwable类的子类。该错误表示主要由于缺少系统资源而导致的问题,我们的应用程序不应捕获这些类型的问题。错误的一些示例是系统崩溃错误和内存不足错误。错误大多发生在运行时,因为它们属于未经检查的类型。 异常是在运行时和编译时可能发生的问题。它主要发生在开发
问题内容: 如何区分Java中的错误和异常? 问题答案: 错误“表示合理的应用程序不应尝试捕获的严重问题”。 而 异常“指示合理的应用程序可能想要捕获的条件”。 错误及其子类都是例外。所有其他异常类都是异常。 检查 异常通常是程序可以从中恢复的异常,最好以编程方式从此类异常中恢复。示例包括,等。希望程序员使用try- catch块检查这些异常,或者将其扔回调用方。 另一方面,我们有 未经检查的 异
错误处理是每个编程语言都要考虑的一个重要话题。在Go语言的错误处理中,错误是软件包API和应用程序用户界面的一个重要组成部分。 在程序中总有一部分函数总是要求必须能够成功的运行。比如strconv.Itoa将整数转换为字符串,从数组或切片中读写元素,从map读取已经存在的元素等。这类操作在运行时几乎不会失败,除非程序中有BUG,或遇到灾难性的、不可预料的情况,比如运行时的内存溢出。如果真的遇到真正
凡事谦虚、温柔、忍耐,用爱心互相宽容,用平和彼此联络,竭力保守圣灵所赐合而为一的心。(EPHESIANS 4:2-3) 错误和异常(3) assert 从代码中理解assert。 >>> assert 1==1>>> assert 1==0Traceback (most recent call last): File "<stdin>", line 1, in <module>Assertion