14天Java基础学习——第9天:异常处理机制

第9天 Java基础学习:异常处理机制

学习目标

在本日的学习中,我们将深入研究Java中的异常处理机制,包括以下几个方面:

  1. 异常与错误分类
  2. try-catch-finally语句
  3. throw与throws关键字
  4. 自定义异常

一、异常与错误分类

Java中的异常主要分为两类:已检查异常(Checked Exception)未检查异常(Unchecked Exception)

1.1 已检查异常(Checked Exception)

  • 定义:在编译时检查的异常,程序员必须主动处理。
  • 示例IOExceptionSQLException
异常类型描述示例
IOException输入输出操作失败或中断文件未找到或无法读取
SQLException数据库访问错误SQL语法错误,数据库连接失败

1.2 未检查异常(Unchecked Exception)

  • 定义:在运行时检查的异常,通常是由于程序错误引起的。
  • 示例NullPointerExceptionArrayIndexOutOfBoundsException
异常类型描述示例
NullPointerException对空对象的引用访问一个未初始化的对象
ArrayIndexOutOfBoundsException访问数组越界访问数组的非法下标

1.3 错误(Error)

  • 定义:指的是Java虚拟机无法处理的严重问题。一般不需要程序员处理。
  • 示例OutOfMemoryErrorStackOverflowError
错误类型描述示例
OutOfMemoryErrorJava虚拟机内存不足应用内存消耗过多
StackOverflowError调用栈溢出,通常由于递归调用过深无限递归

二、try-catch-finally语句

try-catch-finally语句用于处理可能引发异常的代码块,确保程序的正常执行。其结构如下:

try {// 可能引发异常的代码
} catch (异常类型 变量名) {// 异常处理代码
} finally {// 清理资源代码(可选)
}

2.1 例子:基本的try-catch使用

下面是一个示例,展示了如何使用try-catch捕获异常:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class TryCatchExample {public static void main(String[] args) {BufferedReader reader = null;try {reader = new BufferedReader(new FileReader("test.txt"));String line = reader.readLine();System.out.println(line);} catch (IOException e) {System.out.println("发生了IOException: " + e.getMessage());} finally {try {if (reader != null) {reader.close();}} catch (IOException e) {System.out.println("关闭文件时发生异常: " + e.getMessage());}}}
}

2.2 多重catch的使用

可以在一个try块中捕获多种类型的异常,如下所示:

public class MultiCatchExample {public static void main(String[] args) {String str = null;try {// 可能引发异常的代码System.out.println(str.length());} catch (NullPointerException | ArrayIndexOutOfBoundsException e) {System.out.println("发生了异常: " + e.getClass().getSimpleName());}}
}

在上述例子中,NullPointerExceptionArrayIndexOutOfBoundsException都可以被同一个catch块处理。

三、throw与throws关键字

3.1 throw关键字

throw用于显式地抛出一个异常。其语法如下:

throw new 异常类型("异常信息");
例子:
public class ThrowExample {static void validateAge(int age) {if (age < 18) {throw new ArithmeticException("年龄不能小于18岁");} else {System.out.println("年龄验证通过");}}public static void main(String[] args) {try {validateAge(15);} catch (ArithmeticException e) {System.out.println(e.getMessage());}}
}

在这个例子中,当年龄小于18时,会显式抛出一个ArithmeticException异常。

3.2 throws关键字

throws用于在方法声明中指示该方法可能抛出的异常。其语法如下:

返回类型 方法名() throws 异常类型 {// 方法体
}
例子:
public class ThrowsExample {static void checkFile() throws IOException {throw new IOException("文件未找到");}public static void main(String[] args) {try {checkFile();} catch (IOException e) {System.out.println(e.getMessage());}}
}

在此示例中,checkFile方法被声明为可能抛出IOException,在main方法中被妥善处理。

四、自定义异常

自定义异常是Java提供的一种机制,通过继承Exception类或其子类来定义自己的异常类型。

4.1 创建自定义异常

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

// 自定义异常类
class AgeInvalidException extends Exception {public AgeInvalidException(String message) {super(message);}
}public class CustomExceptionExample {static void validateAge(int age) throws AgeInvalidException {if (age < 18) {throw new AgeInvalidException("年龄必须大于或等于18岁");}}public static void main(String[] args) {try {validateAge(16);} catch (AgeInvalidException e) {System.out.println(e.getMessage());}}
}

在这个自定义异常类AgeInvalidException中,我们可以在抛出异常时传递自定义的错误信息。

4.2 捕获自定义异常

自定义异常的捕获方式与普通异常相同,只需在try-catch块中指定异常类型。

总结

本节中,我们深入探讨了Java异常处理机制的各个方面。了解异常与错误分类是处理Java异常的基础。我们学习了使用try-catch-finally语句捕获和处理异常,了解了throwthrows关键字的使用,最后掌握了如何创建和使用自定义异常。

良好的异常处理能够提高程序的健壮性和可维护性,避免程序在运行时因未处理的异常而崩溃。掌握这些概念后,您将能够在编写Java代码时处理各种可能出现的问题,编写出更高质量的应用程序。


 

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Qt信号和槽

信号和槽的概念 在Linux中我们也学过信号 Signal&#xff0c;这是进程间通信的一种方式&#xff0c;这里大致分为三个要素&#xff1a; 信号源&#xff1a;谁发送的信号&#xff08;用户进程&#xff0c;系统内核&#xff0c;终端或者作业控制&#xff0c;&#xff09; 信号的类…

MATLAB绘图

一、实验内容和步骤 MATLAB的图形功能非常强大&#xff0c;可以对二维、三维数据用图形表现&#xff0c;并可以对图形的线形、曲面、视觉、色彩和光线等进行处理。 1、绘制二维曲线 绘制如下图所示的图形&#xff0c;把图形窗口分割为2列2行&#xff0c;在窗口1中绘制一条正弦…

H3C NX30Pro刷机教程-2024-11-16

H3C NX30Pro刷机教程-2024-11-16 ref: http://www.ttcoder.cn/index.php/2024/11/03/h3c-nx30pro亲测无需分区备份 路由器-新机初始化设置路由器登录密码telnet进入路由器后台 刷机上传uboot到路由器后台在Windows环境下解压后的软件包中打开 tftpd64.exe在NX30Pro环境下通过以…

boost之property

简介 property在boost.graph中有使用&#xff0c;用于表示点属性或者边属性 结构 #mermaid-svg-56YI0wFLPH0wixrJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-56YI0wFLPH0wixrJ .error-icon{fill:#552222;}#me…

[C++] 智能指针

文章目录 智能指针的使用原因及场景分析为什么需要智能指针&#xff1f;异常抛出导致的资源泄漏问题分析 智能指针与RAIIC常用智能指针 使用智能指针优化代码优化后的代码优化点分析 析构函数中的异常问题解决方法 RAII 和智能指针的设计思路详解什么是 RAII&#xff1f;RAII 的…

Android数据存储

前言 在前面&#xff0c;我们已经学了控件和布局&#xff0c;那么我们在存储数据的时候&#xff0c;并不能持久化的存储&#xff0c;所以我们需要来学习一些如何持久化存储数据的方式. 数据存储方式 文件存储&#xff1a;在android中提供了openFileInput()方法和openFileOut…

Java基础——多线程

1. 线程 是一个程序内部的一条执行流程程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序 2. 多线程 指从软硬件上实现的多条执行流程的技术&#xff08;多条线程由CPU负责调度执行&#xff09; 2.1. 如何创建多条线程 Java通过java.lang.Thread类的对象…

【网络】网络层——IP协议

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解在网络层下的IP协议。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;网络…

获取当前程序运行时的栈大小[C语言]

废话前言 一晃已经毕业了4年&#xff0c;也在某个时间点&#xff0c;从面试者转变成了面试官。 进行第一次面试的时候&#xff0c;我好像比候选人还慌张&#xff0c;压根不知道问什么&#xff0c;好在是同行业&#xff0c;看着简历问了一些协议内容以及模块设计思路&#xff0…

人工智能之数学基础:数学在人工智能领域中的地位

人工智能&#xff08;AI&#xff09;是一种新兴的技术&#xff0c;它的目标是构建能够像人类一样思考、学习、推理和解决问题的智能机器。AI已经成为了许多行业的重要组成部分&#xff0c;包括医疗、金融、交通、教育等。而数学则是AI领域中不可或缺的基础学科。本文将阐述数学…

UE5 第一人称射击项目学习(一)

因为工作需要&#xff0c;需要掌握ue5的操作。 选择了视频资料 UE5游戏制作教程Unreal Engine 5 C作为学习。 第一个目标是跟着视频制作出一款第一人称射击项目。 同时作为入门&#xff0c;这个项目不会涉及到C&#xff0c;而是一个纯蓝图的项目。 项目目标 这个项目将实…

图像分类之花卉识别实验验证

本实验基于37种主流的图像分类算法模型&#xff0c;对64种花卉进行识别。使用包括vgg、resnet、densenet、efficientnet、inception、mobilenet等37种图像分类模型进行实验&#xff0c;评估各种模型对花卉的识别准确度、计算量、参数量&#xff0c;对比不同模型的性能和优缺点。…

Linux基础开发工具使用

目录 1. 软件包管理器yum 1.1 概念介绍 1.2 更换镜像源&#xff08;可选&#xff09; 1.3 工具的搜索/查看/安装/卸载 1.4 优势 2. vim编辑器 2.1 vi和vim 2.2 三种常用模式和操作 2.3 配置vim 3. Linux编译器-gcc/g 4. Linux调试器-gdb 5. make和Makefile 6.…

电脑怎么自动切换IP地址

在现代网络环境中&#xff0c;电脑自动切换IP地址的需求日益增多。无论是出于网络安全、隐私保护&#xff0c;还是为了绕过地域限制&#xff0c;自动切换IP地址都成为了许多用户关注的焦点。本文将详细介绍几种实现电脑自动切换IP地址的方法&#xff0c;以满足不同用户的需求。…

PMBOK® 第六版 控制进度

目录 读后感—PMBOK第六版 目录 制定了明确的计划后&#xff0c;对计划的控制尤为重要。例如&#xff0c;经常提到的“累积效应”&#xff0c;如果某个阶段的评分仅为0.9分&#xff0c;那么五个得分为0.9分的阶段&#xff0c;最终结果可能只是一个0.5分。 特别是在当今这个时…

linux001.在Oracle VM VirtualBox中ubuntu虚拟系统扩容

1.打开终端切换到virtualBox安装目录 2.输入命令扩容 如上终端中的代码解释&#xff1a; D:\Program Files\Oracle\VirtualBox>.\VBoxManage modifyhd D:\ubuntu18.04\Ubuntu18.04\Ubuntu18.04.vdi --resize 40960如上代码说明&#xff1a;D:\Program Files\Oracle\Virtual…

Web导出Excel表格

背景&#xff1a; 1. 后端主导实现 流程&#xff1a;前端调用到导出excel接口 -> 后端返回excel文件流 -> 浏览器会识别并自动下载 场景&#xff1a;大部分场景都有后端来做 2. 前端主导实现 流程&#xff1a;前端获取要导出的数据 -> 常规数据用插件处理成一个e…

函数栈帧的创建与销毁

我是目录 环境理解栈帧函数栈帧图预备知识寄存器MOV 指令SUB 指令PUSH 指令POP 指令LEA 指令CALL 指令REP STOS 指令 一个简单的C程序栈帧创建栈帧销毁 如何传参数值参数变量参数 如何返回值数值返回变量返回 环境 集成环境&#xff1a;VS2022 x86 编辑语言&#xff1a;C 汇…

服务端高并发分布式结构进阶之路

序言 在技术求知的旅途中&#xff0c;鉴于多数读者缺乏在中大型系统实践中的亲身体验&#xff0c;难以从宏观角度把握某些概念&#xff0c;因此&#xff0c;本文特选取“电子商务应用”作为实例&#xff0c;详细阐述从百级至千万级并发场景下服务端架构的逐步演变历程。同时&am…

Linux:版本控制器git和调试工具cgdb

✨✨所属专栏&#xff1a;Linux✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 版本控制器 为了能够更⽅便我们管理这些不同版本的⽂件&#xff0c;便有了版本控制器。所谓的版本控制器&#xff0c;就是能让你了解到⼀个⽂件的历史&#xff0c;以及它的发展过程的系统。通俗的讲就是⼀…