第八周学习笔记DAY.1-异常

本课目标

了解异常概念

理解Java异常处理机制

会捕捉异常

会抛出异常

了解Java异常体系结构

什么是异常

异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

生活中,根据不同的异常进行相应的处理,而不会就此中断我们的生活

什么是异常处理

Java编程语言使用异常处理机制为程序提供了错误处理的能力

Java中如何进行异常处理

Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

使用try-catch块捕获异常,分为三种情况

第一种情况:正常

public void method(){

         try {

                  // 代码段(此处不会产生异常)

         } catch (异常类型 ex) {

                 // 对异常进行处理的代码段

         }

         // 代码段

}

第二种情况:出现异常

public void method(){

         try {

                // 代码段 1

                // 产生异常的代码段 2

                // 代码段 3

         } catch (异常类型 ex) {

                 // 对异常进行处理的代码段4

         }

         // 代码段5

}

第三种情况:异常类型不匹配

public void method(){

        try {

                 // 代码段 1

                // 产生异常的代码段 2

               // 代码段 3

        } catch (异常类型 ex) {

               // 对异常进行处理的代码段4

        }

        // 代码段5

}

常见的异常类型

Exception 异常层次结构的父类

ArithmeticException 算术错误情形,如以零作除数

ArrayIndexOutOfBoundsException 数组下标越界

NullPointerException 尝试访问 null 对象成员

ClassNotFoundException 不能加载所需的类

IllegalArgumentException 方法接收到非法参数

ClassCastException 对象强制类型转换出错

NumberFormatException 数字格式转换异常,如把"abc"转换成数字

在try-catch块后加入finally块

是否发生异常都执行

不执行的唯一情况 中断程序,退出Java虚拟机

存在return的try-catch-finally块

public void method(){

         try {

               // 代码段 1

              // 产生异常的代码段 2

          } catch (异常类型 ex) {

              // 对异常进行处理的代码段3

               return;

          }finally{

                // 代码段 4

          }

}

多重catch块

引发多种类型的异常

排列catch 语句的顺序:先子类后父类

发生异常时按顺序逐个匹配

只执行第一个与异常类型匹配的catch语句

小结

try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一
面试题:try-catch块中存在return语句,是否还执行finally块? 如果执行,说出执行顺序
try-catch- finally块中, finally块唯一不执行的情况是什么?

声明异常

如果在一个方法体中抛出了异常,如何通知调用者?

throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开

方式1:调用者处理异常

方式2:调用者继续声明异常

    main()方法声明的异常由Java虚拟机处理

抛出异常

除了系统自动抛出异常外,有些问题需要程序员自行抛出异常

使用throw抛出异常

throw与throws 

自定义异常

当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类

使用自定义异常的步骤

异常链

A方法调用B方法时,B方法却抛出了异常。那A方法继续抛出原有的异常还是抛出一个新异常呢? 抛出原有的异常
A方法与B方法进行了关联,不便于代码的修改和扩展

抛出新的异常
异常链创建了新的异常但却保留了原有异常的信息

异常处理原则

异常处理与性能

异常只能用于非正常情况

不要将过于庞大的代码块放在try中

在catch中指定具体的异常类型

需要对捕获的异常做处理

总结

异常分为Checked异常和运行时异常

  Checked异常必须捕获或者声明抛出

  运行时异常不要求必须捕获或者声明抛出

try-catch-finally中存在return语句的执行顺序

finally块中语句不执行的情况 throw和throws关键字的区别

try是尝试捕获程序中可能会产生的异常,当程序产生异常时,会将异常封装成一个异常对象(异常对象有很多种,比如输入不匹配异常、数组下标越界异常....)
 try捕获异常有三种情况:
 1)情况一:try里面的代码没有产生异常,那么try中就不会生成异常对象,catch中的代码就不会执行
 2)情况二:try里面的代码产生了异常,封装成异常对象,catch中的代码正好能够处理产生的这个异常,执行catch中的代码
 3)情况三:try里面的代码产生了异常,封装成异常对象,catch中的代码不能处理这个异常,catch中的代码不会执行,那么程序依然会被中断

退出Java虚拟机的语句
static void exit(int status):终止当前正在运行的 Java 虚拟机,status是一个非零状态码,一般写1。
System.exit(1);

finally语句块中的代码,最终都会执行,不管try里面有没有产生异常,产生的异常catch能不能处理,finally里的代码都会执行
finally里代码块唯一不执行的情况:在try或者catch中有存在退出java虚拟机的语句

public static void main(String[] args) throws Exception {
调用声明了Exception异常的方法m1()
方式一:调用者通过try-catch处理异常
 try {
 m1();
 } catch (Exception e) {
 throw new RuntimeException(e);
 }

方式二:调用者继续声明异常,main()方法声明的异常由Java虚拟机处理
m1();


}

对于异常操作,你以后调用一个声明了异常的方法,要么你进行try-catch处理异常,要么你继续声明异常给main()方法,这两个操作都可以通过点击鼠标实现

相关推荐

  1. 学习笔记DAY.1

    2024-04-26 16:58:04       39 阅读
  2. 学习笔记DAY.5-实用类介绍

    2024-04-26 16:58:04       38 阅读
  3. 十一学习笔记DAY.1-MySQL

    2024-04-26 16:58:04       36 阅读
  4. 学习笔记DAY.2

    2024-04-26 16:58:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 16:58:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 16:58:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 16:58:04       87 阅读
  4. Python语言-面向对象

    2024-04-26 16:58:04       96 阅读

热门阅读

  1. MySQL数据库子查询练习——EXISTS

    2024-04-26 16:58:04       28 阅读
  2. 前端Vue2项目搭建过程

    2024-04-26 16:58:04       33 阅读
  3. Pull和Push的关系以及区别

    2024-04-26 16:58:04       34 阅读
  4. leetcode_29.两数相除

    2024-04-26 16:58:04       33 阅读
  5. 前端深度学习Vue2框架(四)

    2024-04-26 16:58:04       38 阅读
  6. js中页面请求高并发的处理,限制最大请求数量

    2024-04-26 16:58:04       33 阅读