【Java】异常处理 —— Throwable 及其应用

ops/2024/10/19 13:23:35/

通过一张图来展示Throwable类的继承体系,如图2所示。

图2 Throwable异常体系结构图

● Error类称为错误类,它表示Java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠修改程序本身是不能恢复执行的,例如系统崩溃,虚拟机错误等。

● Exception类称为异常类,它表示程序本身可以处理的错误。在Java程序开发中进行的异常处理,都是针对Excption类及其子类的。在Exception类的众多子类中有一个特殊的RuntimeException类,该类及其子类用于表示运行时异常。除了此类,Exception类下所有其他的子类都用于表示编译时异常。

表1 Throwable常用方法

方法声明

功能描述

String getMessage()

返回此throwable的详细消息字符串

void printStackTrace()

将此throwable及其追踪输出至标准错误流

void printStackTrace(PrintStream s)

将此throwable及其追踪输出到指定的输出流

异常的类型

处理编译时异常有两种方式,具体如下:

● 使用try…catch语句对异常进行捕获处理;

● 使用throws关键字声明抛出异常,让调用者对其处理。

1.编译时异常

在Exception的子类中,除了RuntimeException类及其子类外,其他子类都是编译时异常。

2.运行时异常

RuntimeException类及其子类都是运行时异常。

表1 常见运行时异常

异常类名称

异常类说明

ArithmeticException,

算术异常

IndexOutOfBoundsException

角标越界异常

ClassCastException

类型转换异常

NullPointerException

空指针异常

NumberFormatException

数字格式化异常

try...catch和finally

ry{}代码块中包含的是可能发生异常的语句,catch(){}代码块中编写针对捕获的异常进行处理的代码。

需要注意的是,在try{}代码块中,发生异常语句后面的代码是不会被执行的。

有时候会希望有些语句无论程序是否发生异常都要执行,这时就可以在try…catch语句后,加一个finally{}代码块。

throws关键字

在前面章节案例中,定义除法运算时,开发者通常会意识到可能出现的异常,可以直接通过try...catch对异常进行捕获处理,但有些时候,方法中代码是否会出现异常,开发者并不明确或者并不急于处理,为此,Java允许将这种异常从当前方法中抛出,然后让后续的调用者在使用时再进行异常处理。

throw关键字

与throws有所不同的是,throw用于方法体内,并且抛出的是一个异常类对象,而throws关键字用在方法声明中,用来指明方法可能抛出的多个异常。

通过throw关键字抛出异常后,还需要使用throws关键字或try…catch对异常进行处理。需要注意的是,如果throw抛出的是Error、RuntimeException或它们的子类异常对象,则无需使用throws关键字或try…catch对异常进行处理。

自定义异常

java">    // 下面的代码是自定义一个异常类继承自Exceptionpublic class DivideByMinusException extends Exception{public DivideByMinusException (){super();          // 调用Exception无参的构造方法}public DivideByMinusException (String message){super(message); // 调用Exception有参的构造方法}}
java">    public class Example36 {// 下面的方法实现了两个整数相除,public static int divide(int x,int y) throws DivideByMinusException {if (y == 0) {// 使用throw关键字声明异常对象throw new DivideByMinusException("除数是0");}int result = x / y; // 定义一个变量result记录两个数相除的结果return result;       // 将结果返回}public static void main(String[] args) {try {int result = divide(4, 0);System.out.println(result);} catch (DivideByMinusException e) {System.out.println("捕获的异常信息为:" + e.getMessage());}}}


http://www.ppmy.cn/ops/117469.html

相关文章

关于JDK的选择问题

虽然TongWeb本身支持Open JDK、Oracle JDK、TongJDK、毕昇JDK等,但在商用项目上使用时,需要注意Oracle JDK的商业授权问题。目前部分Oracle JDK版本用于商业是收费的,版本如下: Oracle JDK 8之前版本,全免费。 Oracl…

node-red-L3-重启指定端口的 node-red

重启指定端口 目的步骤查找正在运行的Node.js服务的进程ID(PID):停止Node.js服务:启动Node.js服务: 目的 重启指定端口的 node-red 步骤 在Linux系统中,如果你想要重启一个正在运行的Node.js服务&#x…

Linux本地服务器搭建开源监控服务Uptime Kuma与远程监控实战教程

文章目录 前言**主要功能**一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务,如何安装Docker详见: 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址…

【算法——二分查找】

理论基础: 程序员面试经典题,二分搜索一个区间,区间查找 (LeetCode 34)_哔哩哔哩_bilibili 手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili 这个是红蓝法,很牛…

【笔记】2.1 半导体三极管(BJT,Bipolar Junction Transistor)

一、结构和符号 1. 三极管结构 常用的三极管的结构有硅平面管和锗合金管两种类型。各有PNP型和NPN型两种结构。 左图是NPN型硅平面三极管,右图是PNP型锗合金三极管。 从图中可见平面型三极管是先在一块大的金属板上注入杂质使之变成N型,然后再在中间注入杂质使之变成P型,…

Elasticsearch——介绍、安装与初步使用

目录 1.初识 Elasticsearch1.1.了解 ES1.1.1.Elasticsearch 的作用1.1.2.ELK技术栈1.1.3.Elasticsearch 和 Lucene1.1.4.为什么不是其他搜索技术?1.1.5.总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3.Elasticsearch 的一些概念1.3.1.文档和字…

【算法思想·二叉树】最近公共祖先问题

本文参考labuladong算法笔记[拓展:最近公共祖先系列解题框架 | labuladong 的算法笔记] 0、引言 如果说笔试的时候经常遇到各种动归回溯这类稍有难度的题目,那么面试会倾向于一些比较经典的问题,难度不算大,而且也比较实用。 本…

深度学习—神经网络基本概念

一,神经元 1.生物神经元与人工神经元 1.1神经元是人脑的基本结构和功能单位之一。人脑中有数1000亿个神经元,其功能是接受(树突),整合(细胞体),传导(轴突)和…