异常(Throwable)分类
前言
Java中的异常机制是帮助我们找到程序中出现的问题,并预先处理可能会遇到的问题,异常的根类是java.lang.Throwable
,其下有两个子类:java.lang.Error
与java.lang.Exception
,平常所说的异常指java.lang.Exception
。
异常:程序在运行过程中发生由于外部问题(如硬件错误、输入错误)等导致的程序异常事件。
(在Java等面向对象的编程语言中)异常本身是一个对象,产生异常就是产生了一个异常对象。
异常与错误的区别
- Error:表示严重错误,系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理。
- Exception:表示异常,异常产生后可以通过编写代码的方式处理,使程序继续运行。
异常(Exception)都是运行时的。编译时产生的不是异常,而是错误(Error)。
最开始大家都将程序设计导致的错误(Error)认定文不属于异常(Exception)。
但是现在一般都将Error作为异常的一种,所以异常一般分两类,Error与Except。
正文
1.Error
这里只简单介绍一下java内的错误机制,不再赘述。error表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现·OutOfMemoryError
。
2.Exception
我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行处理,修复程序。
异常(Exception)的分类:
异常根据在编译时期还是在运行时期出现而分成以下两类:
- 编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)
- 运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)
异常的产生过程解析
先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundsException。我们通过图解来解析下异常产生的过程。
工具类
public class ArrayTools {
public static int getElement(int[] arr, int index) {
int element = arr[index];
return element;
}
}
测试类
public class ExceptionTest {
public static void main(String[] args) {
int[] arr = { 34, 12, 67 };
intnum = ArrayTools.getElement(arr, 4)
System.out.println("num=" + num);
System.out.println("over");
}
}
总结
Error类和Exception类的父类都是throwable类,他们的区别是:
Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
Exception类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception ),运行时异常;ArithmaticException,IllegalArgumentException,编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用try catch捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。[1]
异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.
引用
[1].艾小天儿. java中error和exception的区别[M]. 上海:简述. 2017年10月