文章目录

  • 异常
  • 一、异常的概念
  • 1、异常体系结构
  • 2、Exception
  • 二、异常的应对方法
  • 2.1 关键字 try 、catch、finally
  • 2.2 多重捕获块
  • 2.3 throws/throw 关键字
  • 四、常见的异常整理
  • 五、补充:如何自定义异常?


异常

只要控制台红了,报错。。。遇到异常

  • 程序中出险异常就会终止后续的语句
  • 实际情况,我们需要解决异常,不能让程序直接终止

一、异常的概念

过程正常,但是出险意外,这就是异常

异常发生在程序运行期间,它影响了正常的程序执行流程

  • 出险异常后,程序不能直接停止,而是处理掉异常,并继续执行
  • 异常发生的原因有很多,通常包含以下几大类:
  • 检查性异常:如用户输入了非法数据。要打开的文件不存在。网络通信时连接中断。。。。
  • 运行时异常:应该要被程序员避免的异常,有可能在编译时被忽略
  • 错误ERROR:错误不是异常,是脱离程序员控制的问题。如栈溢出,一个错误就发生了,编译时也找不到,JVM虚拟机的错误,内存溢出

1、异常体系结构

java 异常后停止 java遇到异常继续执行_java

  • 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类。(一旦继承就是自定义的异常类)