JAVA的异常处理

前几天面试,遇到一些异常的问题,所以做一下总结:

一、异常的分类:

 

ps:来源idea,快捷键:ctrl + alt + u

异常的父类是Throwable,下面区分两个:

Ⅰ、Error,错误,通常是指程序无法处理的异常,系统会处理,一般指的是硬件异常,如:OutOfMemoryError、StackOverflowError等

Ⅱ、Exception,异常,这是我们程序中需要处理的异常,也分为两类:

  ①  RuntimeException,运行时异常,该异常及其子类异常只有在运行程序时才会出现,也称为非检验异常。例如:ArithmeticException(算数异常)、NullPointerException(空指针异常)、IndexOutOfBoundsException(数组下标越界异常)、ClassCastException(类型强制转换异常)

  ②  其他Exception及其子类,属于编译时异常,这是在程序还未运行时就会出现的异常,也称之为检验异常(区别语法错误)例如:ParseException(日期转换异常)

二、异常的捕获

异常发生后,如果不进行捕获,程序就会终止。

异常的捕获分两种:

Ⅰ、在方法上声明,抛给调用该方法人去处理该异常,格式为:throws Exception  多个异常,中间用逗号隔开。

throw new Exception();表示抛出一个异常,当抛出的时一个非运行时异常的话(非RuntimeException)需要在方法上声明,交给上级处理。

拓展:

①、当方法重写时,父类声明的异常,子类需要定义异常范围小于父类,或者子类不定义异常。

②、方法的重写,子类的权限修饰符一定要比父类的更大。

Ⅱ、try-catch-finally代码块处理:

复制代码
try {
/**
* 可能产生异常的代码
*/
double a = 1/0;
} catch (ArithmeticException e) {
/**
* 捕捉并处理异常,或者抛出异常
*/
e.printStackTrace();
} catch (Exception e){
/**
* 捕捉并处理异常,或者抛出异常
*/
} finally {
/**
* 异常处理后,或没有异常最终都要执行的代码
* 常用于释放资源
*/
}
复制代码

拓展:

①、catch的异常可以有多个,但处理精确、范围小的异常放在上面、范围大的放在下面;

②、catch、finally同时有return,会先执行catch中return后的运算,再执行finally的中的代码块;

三、异常中常用的方法:

Ⅰ、getMessage():输出异常信息

Ⅱ、toString():给出异常的类型与性质

Ⅲ、printStackTrace():打印异常栈层次信息,指出异常在程序中的位置(此打印会调用一个新的线程去处理)

 

 

最终,介绍一下finally不执行的几种常见情况:

①、程序在try之前发生异常,并终止;

②、System.exit()强制终止;

③、程序所在线程死亡;

④、关闭CPU.

posted on   南瓜小子  阅读(45)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示