【Java】异常的处理-方式【主线学习笔记】

文章目录

  • 前言
  • 1、处理概述
  • 2、Java异常处理机制(方式)
    • 方式一(抓抛模型):`try-catch-finally`
    • 方式二:`throws` + 异常类型
      • 总结


前言

Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。


1、处理概述

在编写程序时,可能会遇到各种错误或异常情况。例如,在执行除法运算时,分母为零会导致程序崩溃;访问数组时超出边界会引发ArrayIndexOutOfBoundsException。为了避免这些问题,程序员需要在可能出现错误的地方加上检查代码,这往往会导致代码冗长且可读性差。因此,Java引入了异常处理机制,能够集中处理错误,使得程序更加简洁、优雅并易于维护。

2、Java异常处理机制(方式)

Java的异常处理机制主要包括以下几种方式:

方式一(抓抛模型):try-catch-finally

这是Java最常用的异常处理结构。

  • 过程1:“抛”,程序在执行的过程当中,一旦出现异常,就会在出现异常的代码处,生成对应异常类的对象,并将此对象抛出一旦出,此程序就不执行其后的代码了。
  • 过程2:“抓”,针对于过程1中抛出的异常对象,进行捕获处理。此捕获处理的过程,就称为抓。一旦将异常进行了处理,代码就可以继续执行。

其基本语法如下:

try {// 可能会抛出异常的代码块
} catch (异常类型1 e) {// 处理异常的代码块
} catch (异常类型2 e) {// 处理异常的代码块
} finally {// 无论是否发生异常,都会执行的代码块
}
  • try块:用于包围可能抛出异常的代码。如果代码块中发生异常,就会自动生成一个对应异常类的对象,并将此对象抛出。

  • catch块:用于处理try块中发生的特定类型的异常。针对try中抛出的异常的对象,与catch语句进行匹配,一旦匹配上,就进入catch语句进行处理。可以有多个catch块来处理不同类型的异常。

  • finally块:可选的代码块,无论try块或者catch中是否发生异常,无论try中或者catch中是否存在return语句等,finally块中的代码都会执行。通常用于清理资源,如关闭文件、数据库连接等。唯一例外,使用System.exit(0)来种植当前正在运行的java虚拟机。

使用细节
多个catch块的处理:

  • 同层次异常:如果声明了多个catch块,不同异常类型之间不存在父子关系时,顺序可以自由安排。
  • 父子类关系:如果多个异常类型存在父子关系,必须将子类的catch块放在父类的前面。否则,父类的catch块会捕获所有子类异常,导致子类catch块无法被执行,从而出现编译错误。

catch中异常处理的方式,方式有多种:

  • 自定义输出语句: 可以编写自定义的输出信息,提示用户或记录日志。这种方式适用于简单的错误处理。
  • printStackTrace(): 使用此方法可以打印异常的详细信息,包括异常的类型、错误信息以及异常发生时的调用栈。 因为它能够帮助开发者快速定位问题。
  • getMessage(): 使用此方法可以获取发生异常的原因,返回一个描述性的信息。适用于需要简要提示的场景。

什么样的代码需要放在finally当中?

  • 在开发中,一些资源,如输入流、输出流,数据库连接、Socket连接等资源,在使用完以后,必须显示的进行关闭操作,否则,GC不会自动的回收这些资源,从而导致内存泄漏,因此必须将这些操作声明在finally中。

try中声明的变量,出了try结构之后,就不进行调用了。

示例:

try {int result = 10 / 0; // 可能会抛出ArithmeticException
} catch (ArithmeticException e) {System.out.println("除数不能为零!" + e.getMessage());
} finally {System.out.println("无论如何我都会执行。");
}

方式二:throws + 异常类型

throws关键字用于声明方法可能抛出的异常。这并不处理异常,而是将异常抛给了给该方法的调用者,该调用者仍然需要考虑如何处理相关异常。语法如下:

public void myMethod() throws 异常类型 {//表示下面代码中可能会出现的代码// 可能抛出异常的代码
}

当方法调用者调用这个方法时,必须使用try-catch语句来处理可能抛出的异常。
使用细节

  • 子类重写的方法抛出的异常类型可以与父类被重写的方法抛出的异常类型相同,或是父类被重写的方法抛出的异常类型的子类。

示例:

public void readFile(String filePath) throws IOException {FileReader file = new FileReader(filePath);// 处理文件
}public void process() {try {readFile("somefile.txt");} catch (IOException e) {System.out.println("文件读取失败!" + e.getMessage());}
}

总结

Java的异常处理机制通过try-catch-finallythrows关键字,有效地将错误处理与正常程序逻辑分开,增强了代码的可读性和可维护性。使用异常处理,可以更优雅地处理程序运行中的各种意外情况,提高了程序的健壮性。

如果你有具体的例子或想讨论的细节,请告诉我!

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

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

相关文章

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)

3 网络及IP规划 3.1 容器连接网络初步规划 规划所有容器与虚拟机的三张网卡以macvlan的方式进行连接(以后根据应用可以更改),在docker下创建nat、wifi、nei、wai四张网卡,他们和虚拟机及宿主机上NIC的相关连接参数如下表所示&am…

Linux防火墙-案例(二)snatdnat

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令,我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

脑机接口技术的未来与现状:Neuralink、机械手臂与视觉假体的突破

近年来,脑机接口(BCI)技术发展迅速,不仅限于科幻小说和电影,已经逐步进入现实应用。特别是马斯克的Neuralink公司推出的“盲视(Blindsight)”设备,最近获得了FDA的突破性设备认定&am…

Spring Boot:打造下一代医院管理系统

3系统分析 3.1可行性分析 通过对本医院管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院管理系统采用JAVA作为开发语言,Spring Boot框…

动态规划算法题目练习——62.不同路径

1.题目解析 题目来源:62.不同路径——力扣 测试用例 2.算法原理 1.状态表示 这时由于避免越界初始化所以将左上角置为虚拟位置,创建一个二维dp表用来存储到当前为止的所有路径 2.状态转移方程 以dp[i,j]为例,起点到该位置的路径是起点到其上…

费曼学习法没有输出对象怎么办?

‌费曼学习法并不需要输出对象。‌费曼学习法的核心在于通过将所学知识以简明易懂的方式解释给自己听,从而加深对知识的理解和记忆。这种方法强调的是理解和反思的过程,而不是简单地通过输出(如向他人解释)来检验学习效果。费曼学…

YOLO 二元分类器

YOLO 二元分类器 在评估二元分类器性能时,TP、FP、TN和FN是四个核心指标,它们分别代表真阳性、假阳性、真阴性和假阴性。以下是这些指标的定义、计算方法以及在实际应用中的意义: 定义 TP(真阳性):模型正…

找不到concrt140.dll如何修复,快来试试这6种解决方法

concrt140.dll是微软Visual C 2015 Redistributable Package中的一个重要动态链接库文件,它在许多Windows应用程序中扮演着关键角色。本文将详细探讨concrt140.dll丢失的原因、影响、解决方法以及预防措施,帮助用户更好地理解和应对这一问题。 一、什么是…

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45

异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明: 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…

算法知识点————贪心

贪心:只考虑局部最优解,不考虑全部最优解。有时候得不到最优解。 DP:考虑全局最优解。DP的特点:无后效性(正在求解的时候不关心前面的解是怎么求的); 二者都是在求最优解的,都有最优…

WPF下使用FreeRedis操作RedisStream实现简单的消息队列

Redis Stream简介 Redis Stream是随着5.0版本发布的一种新的Redis数据类型: 高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息,这样可以并行处理和提高效率。 阻塞操作:消费者可以设置阻塞操作,这样它们会在流中有新数据…

Springboot 整合 durid

文章目录 Springboot 整合 druiddruid的优势配置参数使用整合 Druid配置数据源配置参数绑定配置参数配置监控页面配置拦截器 Springboot 整合 druid druid的优势 可以很好的监控 DB 池连接 和 SQL 的执行情况可以给数据库密码加密可以很方便的编写JDBC插件 配置参数 使用 整…

算法闭关修炼百题计划(四)

仅供个人复习 1.两数相加2.寻找峰值6.岛屿的最大面积3.最大数4.会议室5.最长连续序列6.寻找两个正序数组的中位数 1.两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请…

.NET CORE程序发布IIS后报错误 500.19

发布IIS后浏览时报错误500.19,同时配置文件web.config的路径中也存在问号“?”。 可能原因:没有安装运行时

ViT(Vision Transformer详解)

Transformer作为前沿的深度学习框架,带有多模态的特性,对于不同类型的输入数据,不管是文本还是图像均可进行处理,而ViT则是对于Transformer中的视觉方面(也就是输入数据为图像)的衍生物(因Trans…

MATLAB - 浮动基座机器人的逆运动学

系列文章目录 前言 本例演示如何解决以浮动底座为模型的机器人的逆运动学问题。浮动底座机器人可以在空间中自由平移和旋转,具有六个自由度。浮动基座机器人的逆运动学问题适用于空间应用,即使用安装在浮动和致动基座上的机械臂在空间操纵物体&#xff0…

ubuntu添加 SSH 密钥到 GitHub

好的,以下是详细的步骤,帮助你在 Ubuntu 上生成并添加 SSH 密钥到 GitHub: 1. 检查是否已有 SSH 密钥 首先,检查你是否已经有 SSH 密钥: ls -al ~/.ssh如果看到 id_rsa 或 id_ed25519 文件,则表示你已有…

kubernetes笔记(七)

一、service管理 1.clusterIP 1)创建服务 # 资源对象模板 [rootmaster ~]# kubectl create service clusterip mysvc --tcp80:80 --dry-runclient -o yaml [rootmaster ~]# vim mysvc.yaml --- kind: Service apiVersion: v1 metadata:name: mysvc spec:type: Cl…

从编程视角看生命、爱、自由、生活的排列顺序

从编程视角看生命、爱、自由、生活的排列顺序 离开大学校园,踏入大厂成为一名算法工程师后,我常以编程思维看待生活中的事物。在思考生命、爱、自由和生活的排列顺序时,发现从编程角度分析这些概念会有独特见解。 一、生命——程序的核心代…

k8s 中的金丝雀发布(灰度发布)

目录 1 什么是金丝雀发布 2 Canary 发布方式 3 Canary 两种发布方式实操 3.1 准备工作 3.1.1 将 nginx 命名两个版本 v1 与 v2 3.1.2 暴露端口并指定微服务类型 3.1.3 进入 pod 修改默认发布文件 3.1.4 测试 service 是否正常 3.2 基于权重的灰度发布 3.2.1 创建 Igress 资源类…