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

2024-04-23 02:36

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

这篇关于第八周学习笔记DAY.1-异常的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927555

相关文章

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结