文章目录
Java异常分类及处理
概念
如果某个方法不能按照正常的途径完成任务,就可以以另一种路径退出该方法。在这种情况下,会抛出一个封装了错误信息的对象。此时这个方法会立刻退出且不返回任何值。另外这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。
异常分类
Throwable是Java语言中所有错误或异常类的超类。其下一层子类包括Error和Exception
Error
Error类是指Java运行时系统内部的错误或资源耗尽错误。应用程序不会抛出该类的对象。如果出现了这类错误,除了告知用户,剩下的就是尽力使得程序安全地终止。
Exception
Exception有两个分支,一个是RuntimeException(运行时异常)、一个是CheckedException(必检异常)。
RuntimeException
诸如NullPointerException、ClassCastException等;该异常是那些可能在Java虚拟机上正常运行期间抛出异常的超类。如果出现RuntimeException,那么一定是程序员的错误。
CheckedException
诸如IOException、SQLException等;这种错误一般是外部错误,常常发生在编译阶段,Java虚拟机便会强制程序去捕获此类异常,,即会出现要求你把这段可能出现异常的程序进行 try catch,该类异常一般包括几个方面:
- 试图在文件尾部读取数据
- 试图打开一个错误格式的 URL
- 试图根据给定的字符串查找 class 对象,而这个字符串表示的类并不存在
Java异常处理方式
-
遇到问题不处理,而是继续抛给调用者
抛出异常通常有三种方式:throw|throws|系统自动抛出异常
public static void main(String[] args) { String s = "abc"; if(s.equals("abc")) { throw new NumberFormatException(); } else { System.out.println(s); } } int div(int a,int b) throws Exception{ return a/b; }
2. try-catch捕获异常针对性处理方式
throw和throws的区别
-
位置不同
throws用在函数上,后面可以跟多个异常类
throw用在函数内,后面跟异常对象
-
功能不同
throws用来声名异常,让调用者可以知道该功能可能出现的问题,可以给出预先的处理方式。throw抛出具体的的异常对象,当执行到throw语句时,该程序功能就已经结束。同时将异常问题抛给其调用者进行处理。也就是说最好不能在throw语句后面增加代码,因为根本无法执行到该段代码。
throws表示异常出现的一种可能性,但并不一定会出现这些异常,而执行throw则一定抛出了某种异常。
两者都是消极处理异常的方式只是会抛出或可能抛出异常,但不会由函数去处理异常,而是都会将异常处理抛给其调用者。
如果try-catch块中出现return,finally的执行情况
一定执行,并且finally的执行早于try内的return
- 不管是否出现异常,finally代码块中的语句一定会执行。
- 当try和catch块中存在return时,finally仍然会执行。
- finally是在return后面的表达式运算后执行的(但无论finally块中的语句怎么样,都不会改变返回值,因为该返回值在finally执行前就已经保存好了,实在其执行前确定的。)
- finally中最好不要包含return,否则程序会提早推出,返回值将不再会是try或catch中保存的返回值。