Java中的异常和处理
- 概念
- 当程序出现不正常的情况,我们把这种情况统称为异常
- java中所有异常的类,都是继承Throwable,Throwable中有两个子类,Error和Exception
- Error 是当程序出现错误,而无法处理的情况
- Exception 是程序出现不正常的情况但可以处理的情况
Exception详解
- RuntimeException和CheckedException的区别
- RuntimeException(运行期异常),不会引起编译错误,不需要强制处理。常见的有:
- ClassCastException(类转换异常)
- NullPointerException(空指针异常)
- IndexOutOfBoundsException(越界异常)
- ArithmeticException(算术异常)
- CheckedException(编译期异常),会引起编译错误,需要强制处理, 否则程序就运行不了
- IOException
- SqlException
- RuntimeException(运行期异常),不会引起编译错误,不需要强制处理。常见的有:
try、catch、finally、throw、throws关键字
try、catch、finally的作用
- try : 检测不安全的代码块(发现异常)
- catch: 异常处理代码
- finally:不管出现或者不出现异常都会执行的代码
- 其中catch和finally可以省略,但是try不能
- 可以多个catch块
- catch的异常,父类异常的catch块在子类异常之后
- 可以catch任何异常
- catch CheckedException时,try块中必须存在可能引发该异常的代码,否则编译错误
如果catch或者finally块中存在异常,则需要再次处理
try{ 程序代码 }catch(异常类型1 异常的变量名1){ 程序代码 }catch(异常类型2 异常的变量名2){ 程序代码 }finally{ 程序代码 }
finally和return
- 不管会不会出现异常都会执行finally
- 无论是在正常代码和异常处理代码中return,仍然会先执行finally再return
- 不会执行finally的情况:System.exit(0);
throw和throws
- throw 抛出一个异常
- 使用 try-catch捕获异常
- 使用throws声明异常
- 语法
- throw new 异常类构造方法;
- throw new Exception();
- throws 在方法签名上声明该方法会抛出某个异常,若该异常为CheckedException 则调用该方法时需要对此进行处理
- 可以声明多种异常类型,用”,”分开即可
示例
public void test throws异常1,异常2,异常3{
}
- throw 抛出一个异常
自定义异常
概念
- 自定义异常就是自己定义的异常类,也就是Exception直接或间接的子类
自定义异常类
public class 异常类名 extends Exception{ public 异常类名(){ super(); } }
- 自定义异常类中往往不写其他方法,只重载需要使用的构造方法
示例
public class GameException extends Exception{ public GameException(){ super(); } }