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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel文件解析--超大Excel文件读写

使用POI写入 当我们想在Excel文件中写入100w条数据时,我们用普通的XSSFWorkbook对象写入时会发现,只有在将100w条数据全部加载入内存后才会用write()方法统一写入,这样效率很低,所以我们引入了SXSSFWorkbook进行超大Excel文件的读…

C语言中的函数

概述 函数是一种可重用的代码块&#xff0c;用于执行特定任务或完成特定功能函数作用&#xff1a;对具备相同逻辑的代码进行封装&#xff0c;提高代码的编写效率&#xff0c;实现对代码的重用函数作用演示代码&#xff1a; #include <stdio.h>// 定义函数 void func() {…

线性表的顺序存储如何设计实现?

如何存储 顺序及链式实现 计算机中的状态

day83 AJAX

1什么是AJAX AJAX语法 AJAX Asynchronous JavaScript and XML 异步js和XML 实现页面某一部份更新&#xff0c;无需服务器转发或重定向 1 $.ajax() 语法: $.ajax( { "url" : "url&qu…

javaScript3

javaScript 一.对象1.概念2.创建对象的三种方法(1).字面量创建&#xff08;利用{}&#xff09;(2)变量、属性、函数、方法的区别(3).new Object创建(4).构造函数 3.new关键字的执行过程4.遍历对象&#xff08;for..in) 二.内置对象 一.对象 1.概念 一组无序的相关属性和方法的…

前端学习之DOM编程案例:点名案例和秒表案例

点名 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>点名案例</title><style>*{margin: 0;padding: 0;}</style> </head> <body><div id"container">…

声明式事务

文章目录 1.事务分类1.传统方式解决事务2.声明式事务 2.声明式事务案例1.需求分析2.解决方案分析3.数据表创建4.编写GoodsDao.java1.编写配置文件JdbcTemplate_ioc.xml2.单元测试 5.编写GoodsService.java6.配置事务管理器JdbcTemplate_ioc.xml7.进行测试 3.debug事务管理器Dat…

2. 链表

链表的概念及结构 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 链表的结构跟⽕⻋⻋厢相似&#xff0c;淡季时⻋次的⻋厢会相应减少&#xff0c;旺季时⻋次的⻋厢会额外增加⼏节。…

@NameBinding注解名称绑定过滤器/拦截器

NameBinding注解名称绑定过滤器/拦截器&#xff0c;只针对某一些资源方法执行处理逻辑 一、为什么要用名称绑定 一般情况下&#xff0c;借助Spring的过滤器或者拦截器等对Http请求或响应进行处理就能满足需求。但是在有些场景下若只需对特定的xxxResource做拦截处理&#xff0…

【ARM Trace32(劳特巴赫) 使用介绍 12.1 -- Trace32 读写 64位地址】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 读写 64位地址读 64 位地址写64位地址Trace32 读写 64位地址 在使用TRACE32进行调试时,有时需要读取或操作64位的地址,特别是在处理64位的处理器或操作系统时。以下是如何在TRACE32中读取64位地址的一般方法。 读 64 位地…

vue-element-admin vue设置动态路由 刷新页面后出现跳转404页面Bug 解决方法

做项目时遇到的这个bug&#xff0c;因为除了跳404之外也没太大影响&#xff0c;之前就一直放着没管&#xff0c;现在项目基本功能实现了&#xff0c;转头处理了一下&#xff0c;现在在这里记录一下解决方法 这个bug的具体情况是&#xff1a;设置了动态路由之后&#xff0c;不同…

FPGA - ZYNQ 基于Axi_Lite的PS和PL交互

前言 在FPGA - ZYNQ 基于EMIO的PS和PL交互中介绍了ZYNQ 中PS端和PL端交互的开发流程&#xff0c;接下来构建基于基于Axi_Lite的PS和PL交互。 开发流程 Axi_Lite从机 在FPGA - AXI4_Lite&#xff08;实现用户端与axi4_lite之间的交互逻辑&#xff09;中&#xff0c;详解介绍…