Java异常类详解(异常、错误)
Throwable
在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。
Throwable 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
一、Error(错误)
表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢 出 等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。
二、Exception(异常)
是应用程序中可能的可预测、可捕获、可恢复问题。一般大多数异常表示中度到轻度的问题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。遇到这类异常,应该尽可能处理异常,使程序恢复运行,二部应该随意终止异常。
1、运行时异常(Unchecked Exception)
RuntimeException类(未检查异常)是Exception的子类,叫做运行时异常,Java中的所有运行时异常都会直接或者间接地继承自RuntimeException类。
Java中凡是继承自Exception,而不继承自RuntimeException类的异常都是非运行时异常。
对于运行时异常(runtime exception),可以对其进行处理,也可以不处理。推荐不对运行时异常进行处理。
RuntimeException是 Exception 类的一个重要的子类。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
运行时异常只有当代码在运行时才发行的异常,编译时不需要 try catch 。 Runtime 如除数是 0 和数组下标越
界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检
测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。
2、编译时异常(checked exception)
又叫非运行时异常(检查异常),必须对其进行处理,否则无法通过编译。
处理方式有两种:
1.使用try…catch…finally进行捕获;
2.在产生异常的方法声明后面写上throws 某一个Exception类型,如throws Exception,将异常抛出到外面一层去。
eption类型,如throws Exception,将异常抛出到外面一层去。