前言
相信小伙伴在编写代码的过程中都或多或少的遇到过各种各样的异常,那么你知道都有哪些异常吗?下面带领大家一起回顾一下Java中的异常。
什么是异常
异常是在我们开发的程序中的一些错误,但是并不是所有的错误都是异常,并且错误有时候是可以避免的。在Java等面向对象的编程语言中异常属于对象。
异常出现的情况也是很多,包括用户输入非法的字符,在程序中没有校验,就会出现参数异常;在程序运行时,出现了除数0的变量,也会出现异常;打开某个路径下的文件,而文件不存在也会出现异常信息。那么我们面对不同的异常该如何处理呢?哪些异常可以让程序继续运行下去哪些异常需要让程序终止运行?这就是我们在编写开发业务逻辑过程中需要注意的地方。
检查时异常:检查时异常是指程序在编译的过程中,进行词法、语法、语句、依赖等编译过程中的异常,程序员是无法预见的异常,是在编译中提示的异常。例如:缺少依赖文件等。
运行时异常:运行时异常是指在编译后,程序运行阶段出现的异常,这类异常在刚步入开发人员的时候出现的比较多,这一类运行时的异常,往往是可以被程序员代码编写所避免的。例如:空指针异常、
错误:是严重的异常,错误在代码中通常被忽略,例如内存溢出等情况。错误在编译的过程中是检测不到的。
Java中的异常
作者是Java开发者,所以基于Java中的异常进行了一下简单的总结。如下图是根据javaJDK中列出的一些异常信息。
从图中可以看到Throwable是Error和Exception的超类,所有的异常类都是Exception的子类,所有的错误都是Error的子类。当我们的程序中出现了异常,需要针对不同的异常进行操作。其中以Throwable 类中的基本方法给大家简单介绍。
getMessage()
getMessage()方法返回关于发生的异常的详细信息。这个消息在Throwable类的构造函数中初始化了。在我们的程序中可以直接通过异常信息去获取Exception e示例如下:
e.getMessage();
getCause()
getCause()返回一个Throwable 对象代表异常原因。
toString()
toString()方法使用getMessage()的结果返回类的串级名字。
printStackTrace()
printStackTrace()方法打印toString()结果和栈层次到System.err,即错误输出流。一般使用printStackTrace()将异常日志输出到控制台中。
getStackTrace()
getStackTrace()方法返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。
异常处理
既然在我们开发程序的中那么多的异常,我们怎么去捕获这些异常并进行处理呢,以减少不必要的错误,那么现在就开始介绍。
throws/throw
throws/throw关键字的作用是如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。其简单格式如下:一般在方法的末尾使用。
public void testException() throws Exception{ }
也可以使用throw 关键字抛出一个异常。使用throw 关键字抛出的异常,在方法名之后需要有throws的关键字声明异常来接受。
public void testException() throws Exception{ throw new Exception(); }
try/catch关键字
在我们的程序中,针对可能出现的异常代码块可以使用try和catch关键字来捕获异常。try/catch 代码块放在异常可能发生的地方。其中被try/catch代码块中的代码称为保护代码,当保护代码中出现异常之后,可以根据业务需要是否继续执行后续代码,还是针对异常信息进行处理并抛出异常,是一种灵活的异常处理方式,其代码块的格式如下:
try{ // 业务代码 }catch(Exception e){ //Catch 块 }
当然针对try/catch关键字中多个 catch的方式也是可以的,称为多重捕获。其常用的格式如下:
try{ // 业务代码 }catch(异常类型1 e1){ // 业务代码 }catch(异常类型2 e2){ // 业务代码 }catch(异常类型3 e3){ // 业务代码 }
在try中的代码发生异常的情况下,优先匹配第一个catch块中的内容,由近及远挨着匹配,直到匹配到相关异常。
finally关键字
finally关键字用来创建在try/catch代码块最后。无论try/catch代码块是否发生异常finally代码块中的代码总会被执行。在finally代码块中,可以运行清理类型等收尾善后性质的语句。其语法格式如下:
try{ // 业务代码 }catch(Exception e){ //Catch 块 }finally{ // 业务代码 }
结语
好了,以上就是Java异常类型及其总结