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

news/2024/10/16 0:20:48/
本课目标

了解异常概念

理解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()方法,这两个操作都可以通过点击鼠标实现


http://www.ppmy.cn/news/1431515.html

相关文章

机器学习|决策树|如何计算信息增益|方法总结

如是我闻 :那你说决策树这块还能考点啥呢,也就是算算属性的信息增益(Information Gain)了, 信息增益是一种评估特征(属性)在分类任务中重要性的方法,它基于熵的概念来计算。熵是一个…

第五十八章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 2:将本机模块与 NSD (CSPcms.dll) 结合使用

文章目录 第五十八章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 2:将本机模块与 NSD (CSPcms.dll) 结合使用注册运行时本机模块启用 Web 网关管理的 CGI 模块 第五十八章 IIS 7 或更高版本的替代选项 (Windows) - 替代选项 2:将本机模块与 NSD (…

Linux i2c-tool工具基础使用

一.i2cdetect i2cdetect 是一个用户空间程序,用于扫描 I2C 总线上的设备。它输出一个表格,其中包含指定总线上检测到的设备列表。以下是 i2cdetect 的使用方法: 运行扫描: 要执行 I2C 扫描,请使用以下命令&#xff1…

ModuleNotFoundError: No module named ‘scripts.animatediff_mm‘ 解决方案

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 本文主要介绍在使用 Stable Diffusion WebUI 安装 AnimateDiff 插件后出现的ModuleNotFoundError: No module named scripts.animatediff_mm异常的解决方案,希望…

【SpringBoot】Spring Boot 项目中整合 MyBatis 和 PageHelper

目录 前言 步骤 1: 添加依赖 步骤 2: 配置数据源和 MyBatis 步骤 3: 配置 PageHelper 步骤 4: 使用 PageHelper 进行分页查询 IDEA指定端口启动 总结 前言 Spring Boot 与 MyBatis 的整合是 Java 开发中常见的需求,特别是在使用分页插件如 P…

vscode自动生成项目目录结构

目录结构如下: 生成步骤如下: vscode安装插件,project-tree安装之后按ctrlshiftp,并输入Project Tree回车点击要生成目录的项目,回车将项目目录生成并存储到README.md中

Oracle中的CASE WHEN语句使用详解与实例

在Oracle数据库中,CASE WHEN语句是一种条件表达式,它允许根据一系列条件进行值的选择或计算。CASE WHEN语句在数据查询、数据转换以及业务逻辑实现等方面具有广泛的应用。本文将详细介绍Oracle中CASE WHEN语句的使用方法和一些常见示例。 一、CASE WHEN…

LT1937

这份文件是关于LT1937,一款专为驱动白色LED而设计的升压(Step-Up) DC/DC转换器的详细技术手册,由凌特公司(Linear Technology Corporation)提供。以下是该文档的核心内容概要: 产品特点: 升压转换器&…