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.mzph.cn/diannao/61152.shtml

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

相关文章

Java-空链处理

什么是 null 在 Java 中&#xff0c;null 是一个非常常见的关键字&#xff0c;用于表示“没有值”或“空”。然而&#xff0c;对于初学者来说&#xff0c;null 的本质可能会感到有些困惑。在本文中&#xff0c;我们将详细探讨 null 在 Java 中的含义和使用。 在 Java 中&…

PyTorch使用教程-深度学习框架

PyTorch使用教程-深度学习框架 1. PyTorch简介 1.1-什么是PyTorch ​ PyTorch是一个广泛使用的开源机器学习框架&#xff0c;特别适合深度学习的应用。它以其动态计算图而闻名&#xff0c;允许在运行时修改模型&#xff0c;使得实验和调试更加灵活。PyTorch提供了强大的GPU加…

供应链管理、一件代发系统功能及源码分享 PHP+Mysql

随着电商行业的不断发展&#xff0c;传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式&#xff0c;即商家不需要自己储备商品库存&#xff0c;而是将订单直接转给供应商&#xff0c;由供应商直接进行发货。这种方式极大地降低了企业的运营成本…

Pr:音频过渡

Adobe Premiere Pro 自带一组共三个音频过渡 Audio Transitions效果。 对音频剪辑之间应用交叉淡化 Crossfade过渡&#xff0c;操作方式类似于应用视频过渡效果。 对于交叉淡化&#xff0c;要保证前剪辑的出点之后及后剪辑的入点之前有足够的预留内容&#xff08;也称“手柄”&…

前端页面开发步骤详解

目录 前言1. 页面搭建1.1 HTML 标签结构1.2 CSS 样式设计 2. 数据绑定与事件处理2.1 数据绑定2.2 表单校验 3. 调用后台接口3.1 接口文档与工具封装3.2 参数传递与接口调用 结语 前言 在前端开发过程中&#xff0c;从页面搭建到与后台接口对接是一个必不可少的完整流程。无论是…

A037-基于Spring Boot的二手物品交易的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

两行命令搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),含完整的 Docker 安装步骤

深度学习环境的配置过于繁琐&#xff0c;所以我制作了两个基础的镜像&#xff0c;希望可以帮助大家节省时间&#xff0c;你可以选择其中一种进行安装&#xff0c;版本说明&#xff1a; base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel&#xff0c;默认 python 版本…

EXCEL延迟退休公式

如图&#xff1a; A B为手工输入 C2EOMONTH(A2,B2*12) D2EOMONTH(C2,IF(C2>DATEVALUE("2025-1-1"),INT((DATEDIF(DATEVALUE("2025-1-1"),C2,"m")4)/4),0)) E2EOMONTH(A2,B2*12IF(EOMONTH(A2,B2*12)>DATEVALUE("2025-1-1"),INT(…

区块链技术在数据安全中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在数据安全中的应用 区块链技术在数据安全中的应用 区块链技术在数据安全中的应用 引言 区块链技术基础 1.1 区块链的…

GIT 入门详解指南

前言&#xff1a; 注&#xff1a;本博客仅用于记录本人学习过程中对git的理解&#xff0c;仅供学习参考&#xff0c;如有异议请自行查资料求证 安装 使用git之前必须完成git的安装&#xff0c;Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行 git 安装教程 基本…

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择

在 移动端 接入语音合成方面&#xff0c;讯飞和腾讯云等都是优秀的选择&#xff0c;但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言&#xff0c;以下是对各个平台的详细比较&#xff1a; 一、讯飞语音合成介绍 与语音听写相反&#xff0c;语音合成是将一段…

HarmonyOS本地存储-Preferences(用户首选项)的使用

一&#xff0c;用户首选项简述 ohos.data.preferences (用户首选项) 用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。 数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据…

【机器学习】回归模型(线性回归+逻辑回归)原理详解

线性回归 Linear Regression 1 概述 线性回归类似高中的线性规划题目。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合&#xff08;加减乘除&#xff09;起来&#xff0c;得到的结果和目标接近。 线性回归分为一元线性回归和多元线性回归。 2 一元线…

OceanBase 分区表详解

1、分区表的定义 在OceanBase数据库中&#xff0c;普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中&#xff0c;同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表&#xff0c;而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…

【Android原生问题分析】夸克、抖音划动无响应问题【Android14】

1 问题描述 偶现问题&#xff0c;用户打开夸克、抖音后&#xff0c;在界面上划动无响应&#xff0c;但是没有ANR。回到Launcher后再次打开夸克/抖音&#xff0c;发现App的界面发生了变化&#xff0c;但是仍然是划不动的。 2 log初分析 复现问题附近的log为&#xff1a; 用户…

使用 K-means 算法进行豆瓣读书数据的文本聚类分析

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Django5 2024全栈开发指南(二):Django项目配置详解

目录 一、基本配置信息二、资源文件配置2.1 资源路由——STATIC_URL2.2 资源集合——STATICFILES_DIRS2.3 资源部署——STATIC_ROOT2.2.4 媒体资源——MEDIA 三、模板配置四、数据库配置4.1 mysqlclient连接MySQL4.2 pymysql连接MySQL4.3 多个数据库的连接方式4.4 使用配置文件…

数据结构-二叉搜索树(Java语言)

目录 1.概念 2.查找search 3.插入insert ​编辑4.删除remove&#xff08;难点&#xff09; 5.性能分析 1.概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树 : 1.若它的左子树不为空&#xff0c;则左子树上所有节点的值都…

学习笔记:黑马程序员JavaWeb开发教程(2024.11.18)

9.8 Mybatis-基础操作-查询&#xff08;条件查询&#xff09; 需要模糊查询&#xff0c;根据要求&#xff0c;我们需要在关键词前后都加上%&#xff0c;但是我们不能使用‘%#{内容}%’的形式&#xff0c;因为#{内容}最终会变成?&#xff0c;而?不能放在‘’之中&#xff…

数据分析-48-时间序列变点检测之在线实时数据的CPD

文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 实时数据CPD3.1 SDAR学习算法3.2 Changefinder模块3.3 恒定方差CPD3…