Java异常处理总结
一、基本概念
异常处理的作用:异常处理是对可能出现的异常进行处理,让程序在发生错误的地方停下来并处理错误。不将错就错,以防止程序遇到异常时被卡死,处于一直等待,或死循环。它可以提高程序的健壮性和容错性。
异常处理的任务:将控制权从错误产生的地方转移给能够处理这种情况的错误处理器。
异常有两个过程:一个是抛出异常;一个是捕捉异常。异常最终一定是要捕捉并处理的,抛出异常是不就地处理异常,而是将异常抛出给上层调用它的方法程序处理。
异常的类型:
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
- 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。需要注意的是:Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
如上图所示所有的异常类是从 java.lang.Exception 类继承的子类。
Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。异常类有两个主要的子类: IOException 类和 RuntimeException 类。
二、捕获(try{…}catch{…})和抛出(throw/throws)
1、捕获
使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。语法如下:
try{
// 程序代码
}
catch(异常类型1 异常的变量名)
{
// 程序代码
}
catch(异常类型2 异常的变量名2)
{
// 程序代码
}
……
finally{
// 程序代码
}
try{…}中放置可能会发生异常的的语句块,catch(){…}用于抓住异常并定义异常出现时的处理方法,finally{…}表示不管异常是否发生,都得进行finally{…}中的处理。catch(){…}块可以有一个或者多个,finally{…}块可以没有。且某个函数或某段程序块不管会不会、有没可能抛出异常,都可以加try{…}catch{…}去捕捉它。
2、抛出
抛出异常有三种形式:throw、throws、系统自动抛异常。
1)throw与throws的比较
- throws出现在方法函数头,放在方法签名的尾部;而throw出现在函数体。
- 一个方法可以通过throws声明抛出多个异常,多个异常之间用逗号隔开。
- throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
- 两者都只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
2)自定义异常
用户可以自定义异常,新建一个异常类,让其继承Exception类或Exception的某个子类。然后用throw抛出自己定义的异常类对象。
/***********************************************************************************************************************************************
侵删
/***********************************************************************************************************************************************