Java学习笔记NO.27

Java异常

异常处理在Java编程中是一项至关重要的技术,它有助于增强程序的稳定性和可靠性。

1.为什么需要处理异常?

    在编写Java程序时,我们无法保证代码的100%正确性,因为各种意外情况可能会导致程序出现错误。这些意外情况包括但不限于:文件不存在、网络连接中断、用户输入错误等。如果这些异常没有得到适当处理,可能会导致程序崩溃或产生不可预期的结果,影响用户体验和系统稳定性。

异常处理的主要目的是使程序具备容错能力,当程序遇到异常时,能够优雅地处理异常情况,保证程序的正常运行。通过合理处理异常,可以避免程序崩溃,提高系统的健壮性。

2.异常处理机制

Java中的异常处理机制主要通过try-catch语句和throws关键字来实现。

(1)try-catch语句

try-catch语句用于捕获可能抛出异常的代码块,并在发生异常时执行相应的处理逻辑。语法如下:

try { // 可能抛出异常的代码块 } 
catch (ExceptionType1 e1) { // 处理ExceptionType1类型的异常 } 
catch (ExceptionType2 e2) { // 处理ExceptionType2类型的异常 } 
finally { // 可选的finally块,用于执行无论是否发生异常都需要执行的代码 }

在try块中编写可能抛出异常的代码,catch块用于捕获和处理不同类型的异常,finally块用于执行无论是否发生异常都需要执行的清理工作,例如释放资源等。

下面是一个示例:

public class TryCatchExample { 
public static void main(String[] args) { 
try { 
int result = 10 / 0; // 除零异常 } 
catch (ArithmeticException e) { 
System.out.println("除零异常发生:" + e.getMessage()); } } }
(2)throws关键字

throws关键字用于在方法签名中声明该方法可能抛出的异常类型,让调用者处理异常。语法如下:

public void methodName() throws ExceptionType1, ExceptionType2 { 
// 方法体可能抛出异常的代码块 
}

在方法签名中使用throws关键字声明可能抛出的异常类型,调用者可以选择捕获异常或继续抛出。

下面是一个示例:

public class ThrowsExample { 
public void readFile() throws FileNotFoundException { 
// 可能抛出文件不存在异常 
FileInputStream fis = new FileInputStream("file.txt"); } }
(3)finally块

finally块中的代码无论是否发生异常都会执行,通常用于释放资源或清理工作。finally块是可选的,语法如下:

try { 
// 可能抛出异常的代码块 } 
finally { 
// 无论是否发生异常都会执行的代码块 }

下面是一个示例:

public class FinallyExample { 
public static void main(String[] args) { 
try { 
System.out.println("try块"); } 
finally { 
System.out.println("finally块"); } } }
3.自定义异常类

除了Java提供的异常类型外,我们还可以自定义异常类来满足特定的业务需求。自定义异常类通常需要继承自Exception或其子类,并提供构造方法和其他必要的方法。

下面是一个自定义异常类的示例:

public class CustomException extends Exception { 
private int errorCode; public CustomException(String message, int errorCode) { 
super(message); 
this.errorCode = errorCode; } 
public int getErrorCode() { 
return errorCode; } }

使用自定义异常类的示例:

public class CustomExceptionExample { 
public void process() throws CustomException { 
// 模拟抛出自定义异常 
throw new CustomException("自定义异常信息", 500); } 
public static void main(String[] args) { 
CustomExceptionExample example = new CustomExceptionExample(); 
try { 
example.process(); } 
catch (CustomException e) { 
System.out.println("捕获自定义异常:" + e.getMessage()); 
System.out.println("错误码:" + e.getErrorCode()); } } }

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

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

相关文章

二维码门楼牌管理应用平台建设:实现民主参与的新途径

文章目录 前言一、二维码门楼牌管理应用平台的兴起二、投票表决功能的实现三、居民参与度的提升四、面临的挑战与前景展望 前言 在数字化时代,二维码技术的应用已经渗透到我们生活的方方面面。近期,二维码门楼牌管理应用平台的建设成为了社区治理的一大…

学习嵌入式系统开发学习课程有哪些

学习嵌入式系统开发需要掌握一些基础的编程知识和硬件知识,以下是一些常见的嵌入式系统开发学习课程和资源: 1. **C/C编程课程**:掌握好C/C编程语言是嵌入式系统开发的基础,可以通过在线教育平台如Coursera、Udemy、edX等搜索相关…

[flask]请求全局钩子

flask从入门到精通之钩子、异常、context、jinjia模板、过滤器 - 异步非阻塞 - 博客园 (cnblogs.com) 参考的这个博客,但有一个需要注意的是,最新版本的flask不知道是不是更新了还是怎么了,他的before_first_request不见了,如果继…

Vue2源码 —— 数据响应式实现

Vue2源码 —— 数据响应式实现 配置项 //package.json {"name": "vue","version": "1.0.0","main": "index.js","scripts": {"dev": "rollup -cw"},"author": "&…

Linux非root用户安装mysql5.7

1、下载安装包MySQL :: Download MySQL Community Server 点击Archives 我下载的是5.7.27版本,linux主机直接选择linux-Generic即可,选择第一个包下载即可 2、安装mysql 解压 shell> tar xzvf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz shell&g…

VUE2实现元素抖动的指令

指令代码 要实现Vue2的指令,可以按照以下步骤进行: 创建一个指令对象。 export default {inserted: (el, binding) > {// 触发抖动效果if (!binding.value) return el.classList.remove(shake-animation)el.classList.add(shake-animation)const a…

抽象类和接口的简单认识

目录 一、抽象类 1.什么是抽象类 2.抽象类的注意事项 3.抽象类与普通类的对比 二、接口 1.接口的简单使用 2.接口的特性 3.接口的使用案例 4.接口和抽象类的异同 一、抽象类 所谓抽象类,就是更加抽象的类,也就是说,这个类不能具体描…

等级保护测评无补偿因素的高风险安全问题判例(共23项需整改)

层面 控制点 要求项 安全问题 适用范围 充分条件 整改建议简要 安全物理环境 基础设施位置 应保证云计算基础设施位于中国境内 1.云计算基础设施物理位置不当 二级及以上 相关基础设施不在中国境内 云平台相关基础设施在中国境内部署 安全通信网络 网络架构 应…

NFC RC522开发记录

文章目录 一、ID卡、IC卡(M1卡、CPU卡)的区别二、RC522读写操作1. 数据读写流程三、RC522驱动代码1. RC522 与 STM32 的接线图2. RC522.c3. RC522.h4. main.c一、ID卡、IC卡(M1卡、CPU卡)的区别 ID卡 :只存储了ID号,设备识别ID号,没有算法可言,容易复制,安全性低IC卡包含了…

ALPHA开发板上PHY网络芯片LAN8720:常用的几个寄存器功能

一. 简介 正点原子的开发板 ALPHA开发板,有线网络硬件方案所使用的也是最常用的一种方案,IMX6ULL芯片内部是自带 MAC网络芯片的,所以,也就是采用 "SOC内部集成网络MAC外设 PHY网络芯片方案"。 前面一篇文章简单了解了…

Asp.net Core 中一键注入接口

Asp.net Core 中一键注入接口 前言准备开始使用 前言 在之前开发Asp.Net Core程序时遇到接口需要一个一个的注入到Services中,当有非常多的接口需要注入时会显得代码成为了一座山,这里记录一下如何通过接口的命名一键自动注入. 准备 IDE: Visual studio 2022 .Net版本:.Net …

机器学习——最优化模型

最优化模型的概述: 从某种程度上说,我们的世界是由最优化问题组成的。每一天,我们的生活都面临无数的最优化问题:上班怎么选择乘车路线,才能舒服又快速地到达公司;旅游如何选择航班和宾馆,既省…

不可变集合及Stream流

若希望某个数据是不可修改的,就可以考虑使用不可变集合,以提高安全性;(JKD9之后才有) List不可变集合: public static void main(String[] args) {/*创建不可变的List集合"张三", "李四&q…

conda 创建 python3.10.12 环境

conda 创建 python3.10.12 环境 介绍使用前置条件:安装 conda配置环境变量验证 Conda 安装结果创建环境:python激活 Anaconda 环境 验证 Python 版本。 介绍 Conda是一个开源的包管理和环境管理系统,由Continuum Analytics公司开发。它可以安…

python之@overload

from typing import overloadoverload def repeat(s: str, count: int) -> str:...overload def repeat(s: bytes, count: int) -> bytes:...这段代码是在定义一个名为repeat的函数,其中使用了Python的类型注解和装饰器overload来进行重载(Overloa…

批量爬取招聘网站【Boss直聘】上工作岗位的招聘信息

不管是学生还是工作的小伙伴,估计都对不同岗位工作几年的薪酬水平比较感兴趣。本文提供爬取招聘网站,获取某类工作招聘信息的实现逻辑和代码。具体的实施步骤是:明确爬取的招聘网站—确定爬取的工作城市—确定爬取的岗位—获取岗位的招聘子链…

学习Python渗透第14天:用python实现sql注入

sql注入这个漏洞一直位于owasp列出的漏洞排行榜的前几位,虽然这个漏洞的使用难度很低,但是破坏力却极其的大。sql注入的原理是将原本的sql语句与用户可控的参数进行了拼接,形成了非预期的sql语句的执行,从而可能造成信息泄露或者如…

Sy6 编辑器vi的应用(+shell脚本3例子)

实验环境: 宿主机为win11,网络:10.255.50.5 6389 WSL2 ubuntu 目标机的OS:Ubuntu 内核、版本如下: linuxpeggy0223:/$ uname -r 5.15.146.1-microsoft-standard-WSL2 linuxpeggy0223:/$ cat /proc/version Linux vers…

【Blockchain】区块 | 节点 | 共识机制 | 公链 | 联盟链 | 以太坊 | DApp | 智能合约

Blockchain 初识区块链区块链是什么什么是区块什么是节点什么是分布式什么是共识机制工作量证明(Proof of Work, PoW)权益证明(Proof of Stake, PoS)历史证明(Proof of History, PoH)权威证明(Proof of Authority, PoA)信誉共识(Proof of Reputation, PoR)存储证明(Proof of St…

【3DsMax+Pt】练习案例

目录 一、在3DsMax中展UV 二、在Substance 3D Painter中绘制贴图 一、在3DsMax中展UV 1. 首先创建如下模型 2. 选中如下三条边线作为接缝 重置剥 发现如下部分还没有展开 再选一条边作为接缝 再次拨开 拨开后的UV如下 二、在Substance 3D Painter中绘制贴图 1. 新建项目&am…