第八周学习笔记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()方法,这两个操作都可以通过点击鼠标实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/564913.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

空间金字塔池化SPP、SPPF、ASPP、PPM、ASPP等汇总

Original SPP 最原版的SPP(Spatial Pyramid Pooling)是14年在何凯明大神的《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》这篇文章中提出的,具体介绍见SPP: Spatial Pyramid Pooling_spatial pyramid …

制造数字化“管理套路”

在当今竞争激烈的市场环境中,制造企业始终关心三个核心问题:生产效率、产品质量、成本控制,所以许多企业渴望加强对生产过程的管理控制。 生产过程是一个相对复杂的过程,涉及到多个环节和因素。从原材料的采购到产品的设计、生产…

JavaSE-15笔记【注解(+2024新)】

文章目录 1.注解概述2.几个常用的JDK内置的注解2.1 Deprecated2.2 Override2.3 SuppressWarnings2.4 FunctionalInterface 3.自定义注解3.1 注解也可以定义属性3.2 注解的使用规则补充 4.元注解4.1 Retention4.2 Target4.3 Documented4.4 Inherited4.5 Repeatable 5.通过反射获…

docker环境搭建

项目环境搭建 1、安装 Linux 虚拟机 (1)下载安装: VM VirtualBox 下载安装:Downloads – Oracle VM VirtualBox,要先开启CPU虚拟化 (2)通过vagrant,在VirtualBox中安装虚拟机 下…

500道Python毕业设计题目推荐,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【Java基础】21.重写(Override)与重载(Overload)

文章目录 一、重写(Override)1.方法重写2.方法的重写规则3.Super 关键字的使用 二、重载(Overload)1.方法重载2.重载规则3.实例 三、重写与重载之间的区别 一、重写(Override) 1.方法重写 重写(Override)是指子类定义了一个与其父类中具有相同名称、参…

LeetCode - 150. 逆波兰表达式求值

LeetCode - 150. 逆波兰表达式求值 解题思路: 想要解决该题目,我们首先需要知道什么是逆波兰表达式,逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。 我们平常使用的算式则是一种中缀表达式,如( 1 2 …

Spring基础 SpringAOP

前言 我们都知道Spring中最经典的两个功能就是IOC和AOP 我们之前也谈过SpringIOC的思想 容器编程思想了 今天我们来谈谈SpringAOP的思想 首先AOP被称之为面向切面编程 实际上面向切面编程是面向对象的编程的补充和完善 重点就是对某一类问题的集中处理 前面我们写的统一异常管理…

React Router 6 + Ant Design:构建基于角色的动态路由和菜单

要根据用户的角色生成不同的路由菜单并实现权限控制,你可以采取以下步骤: 定义路由配置 首先,你需要定义一个包含所有可能路由的配置文件,例如: const routes [{path: /dashboard,element: <DashboardPage />,roles: [admin, manager, user]},{path: /users,element:…

设计模式——模板方法

1)模板方法模式(Template Method Pattem)&#xff0c;又叫模板模式(Template Patern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 2)简单说&#xff0c;模板方法模式 定义一个操作中…

Splashtop Cloud RADIUS 解决方案入围教育技术奖

2024年4月17日 加利福尼亚州库比蒂诺 Splashtop 在简化随处办公的远程解决方案领域处于领先地位&#xff0c;该公司自豪地宣布最近入围了《教育技术文摘》&#xff08;EdTech Digest&#xff09;的“2024年教育技术奖”的“炫酷工具”决赛。教育科技奖成立于2010年&#xff0c…

都2024 年了,可以卸载的VS Code 插件

在 VS Code 中&#xff0c;庞大的插件市场提供了丰富多样的扩展功能&#xff0c;以增强编码体验和效率。然而&#xff0c;如果你安装了很多插件&#xff0c;就可能会导致&#xff1a; 性能下降&#xff1a;过多的插件可能导致 VS Code 的启动速度变慢&#xff0c;特别是在启动或…

【自动驾驶车辆-运动控制】运动学模型(Kinematic Model) | 手写数学推导公式 by.Akaxi

【前言】 在设计自动驾驶规控算法时&#xff0c;常常需要获取车辆的各种位姿、角度等信息&#xff0c;要控制车辆的运动&#xff0c;首先要对车辆的运动建立数字化模型&#xff0c;模型建立的越准确&#xff0c;对车辆运动的描述越准确&#xff0c;对车辆的跟踪控制的效果就越…

【Leetcode笔记】236.二叉树的最近公共祖先

文章目录 题目要求ACM运行结果 题目要求 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能…

过滤器Filter和拦截器Interceptor心得

上一篇文章讲了监听器Listener&#xff0c;下面我们来讲一下过滤器和拦截器。 一、过滤器Filter。 首先&#xff0c;servlet容器&#xff08;比如tomcat&#xff09;肯定的要有servlet才能发挥它的光彩。在上古jsp时代&#xff0c;我们会写各种servlet通过不同的请求来实现我…

浅说深度优先搜索(中)——回溯

写在最前 相信在你们不懈的努力之下&#xff0c;基本的递归一定可以写出来了&#xff0c;那么我们现在就来看看递归的升级版——回溯怎么写吧&#xff01; 简说回溯 递归是一种特别重要的解题策略。大部分题目需要找到最优解&#xff0c;而这个求解过程可能存在一定的规律性…

排序算法之基数排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性基数排序O(n*k)O(n*k)O(n*k)O(nk)Out-place稳定 稳定&#xff1a;如果A原本在B前面&#xff0c;而AB&#xff0c;排序之后A仍然在B的前面&#xff1b…

03-为啥大模型LLM还没能完全替代你?

1 不具备记忆能力的 它是零状态的&#xff0c;我们平常在使用一些大模型产品&#xff0c;尤其在使用他们的API的时候&#xff0c;我们会发现那你和它对话&#xff0c;尤其是多轮对话的时候&#xff0c;经过一些轮次后&#xff0c;这些记忆就消失了&#xff0c;因为它也记不住那…

笔记本电脑坏了硬盘数据会丢失吗 笔记本电脑坏了如何取出硬盘的资料 数据恢复软件

笔记本电脑对我们真的非常重要了&#xff0c;是实现无纸化办公和学习的重要工具&#xff0c;但是如果笔记本电脑坏了我们存储在电脑里的资料该怎么办&#xff1f;笔记本电脑坏了硬盘数据会丢失吗&#xff1f;相信有许多朋友都会有这样的担忧。本文今天就为大家解决笔记本电脑坏…

Docker 的基本管理

一. 云的相关知识 1. 关于云 云端服务器都有哪些提供商&#xff1a; 国内&#xff1a; 阿里云&#xff08;Alibaba Cloud&#xff09;&#xff1a; 提供ECS&#xff08;Elastic Compute Service&#xff09;弹性计算服务&#xff0c;包括通用型、计算型、内存型等多种实例…