文章目录
- 异常
- 一、异常的概念
- 1、异常体系结构
- 2、Exception
- 二、异常的应对方法
- 2.1 关键字 try 、catch、finally
- 2.2 多重捕获块
- 2.3 throws/throw 关键字
- 四、常见的异常整理
- 五、补充:如何自定义异常?
异常
只要控制台红了,报错。。。遇到异常
- 程序中出险异常就会终止后续的语句
- 实际情况,我们需要解决异常,不能让程序直接终止
一、异常的概念
过程正常,但是出险意外,这就是异常
异常发生在程序运行期间,它影响了正常的程序执行流程
- 出险异常后,程序不能直接停止,而是处理掉异常,并继续执行
- 异常发生的原因有很多,通常包含以下几大类:
- 检查性异常:如用户输入了非法数据。要打开的文件不存在。网络通信时连接中断。。。。
- 运行时异常:应该要被程序员避免的异常,有可能在编译时被忽略
- 错误ERROR:错误不是异常,是脱离程序员控制的问题。如栈溢出,一个错误就发生了,编译时也找不到,JVM虚拟机的错误,内存溢出
1、异常体系结构
- Error和Exception都是Throwable的子类
- Error错误应该尽量避免
- Exception是未知因素的意外导致的
目前RuntimeException类异常是我们比较常见的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7qFYwuL-1654507032260)(E:\JavaProject\BaiduSyncdisk\笔记本\截图\Throwable.png)]
2、Exception
- 非程序性异常,作为程序员要懂得如何处理这些异常,有些异常甚至编译都无法通过
- Java有自定义了很多异常,一半并不需要自定义额外的异常
- 和Error的区别:
- Error一般是灾难性的异常,是程序无法控制和处理的
- Exception通常是可以被程序的处理的,应该尽可能去处理这些异常
二、异常的应对方法
有5个相关的关键字 try 、catch、finally、throw、throws
2.1 关键字 try 、catch、finally
- 语法如下
try
{
// 程序代码
} catch (ExceptionName 异常的变量名1){ // 异常名可以填写想要捕获的异常类型
//Catch 块
} finally {
// finnally代码块
}
- catch的后语句块里是异常出现后执行的
- 当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
- 异常的变量名1有点类似字符串,可以直接输出
- 里面的
ExceptionName
可以直接写Exception
,可以捕获所有的的异常,也可以写Error
,甚至写他们的父类Throwable
- 因为
Exception
是异常的总类型,囊括了异常的所有类型——但是最好不要只判断一个 - 在同时捕获多个异常时,越大的异常要写越后面
finally后面的代码块
——无论程序是否出异常都会执行,用于处理善后工作。(这部分是可选的)
- finnaly一般用于后续要学习的 关闭IO流,资源的关闭(善后)
- IDEA生成代码块快捷键:
ctrl + alt +T 选择对应的内容
- 如果要打印异常,可以使用异常的方法
printStackTrace()
2.2 多重捕获块
- 一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。,语法如下
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型3 异常的变量名3){
// 程序代码
}
- 运行逻辑也从上到下依次检索异常
如果抛出异常的数据类型与 异常类型1 匹配,它在这里就会被捕获。如果不匹配,它会被传递给第二个 catch 块。
如此,直到异常被捕获或者通过所有的 catch 块。
2.3 throws/throw 关键字
主动抛出异常,一般用在方法中
- 在一个方法中,我们可以自定义情况用throw来抛出异常。用法如下
throw new RemoteException();
- 举例 ,比如除数不能为0 ,我们可以手动判断
void div(int a,int b) {
if (b == 0){
throw new ArithmeticException();
}
System.out.println(a/b);
}
- 如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。
四、常见的异常整理
-
ArithmeticException(/ by zero)
—— 算数异常(除数不能为0 ) ArrayIndexOutOfBoundsException
-
NullPointException
——空指针异常 -
InputMismatchException
——输入异常
五、补充:如何自定义异常?
写开源框架或者大型系统时,才需要用到
目前Java内置的异常可以描述在编程时出现的大部分异常。。。
- 方法归结一句话:只需要写一个类,继承Exception类。(一旦继承就是自定义的异常类)