Java高级重点知识点-17-异常

文章目录

  • 异常
  • 异常处理
  • 自定义异常

异常

指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。

  1. 异常体系

异常的根类是 java.lang.Throwable,,其下有两个子类:java.lang.Error 与 java.lang.Exception。
在这里插入图片描述
在这里插入图片描述

  1. 异常分类
  • 编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)
  • 运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)

在这里插入图片描述

异常处理

Java异常处理的五个关键字:try、catch、finally、throw、throws

  1. 抛出异常throw

使用格式:

throw new 异常类名(参数);
public class ExceptionDemo {public static int getElement(int[] arr , int index){if (index < 0 || index >= arr.length){throw new ArrayIndexOutOfBoundsException("数组下标越界啦!");}int element = arr[index];return element;}public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};int index = 5;int element = getElement(arr, index);System.out.println(element);System.out.println("over");}
}

在这里插入图片描述

  1. 声明异常throws

使用格式:

修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
import java.io.FileNotFoundException;
import java.io.IOException;public class ExceptionDemo {public static void findFile(String file) throws FileNotFoundException,IOException{if (!file.equals("a.txt")){throw new FileNotFoundException("找不到文件");}int index = file.lastIndexOf(".");String prefix = file.substring(index);if (prefix.equals(".txt")){System.out.println("文件格式正确");}else {throw new IOException("文件格式不正确");}}public static void main(String[] args) throws IOException {String file = "a.txt";findFile(file);System.out.println("over");}
}

在这里插入图片描述

  1. 捕获异常try…catch

Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。

try{编写可能会出现异常的代码
}catch(异常类型 e){处理异常的代码//记录日志/打印异常信息/继续抛出异常
}
  • 该方法不处理,而是声明抛出,由该方法的调用者来处理(throws)。
  • 在方法中使用try-catch的语句块来处理异常。
import java.io.IOException;public class ExceptionDemo {public static void findFile(String file) throws IOException{int index = file.lastIndexOf(".");String prefix = file.substring(index);if (prefix.equals(".txt")){System.out.println("文件格式正确");}else {throw new IOException("文件格式不正确");}}public static void main(String[] args){String file = "a.html";try {findFile(file);} catch (IOException e) {e.printStackTrace();System.out.println(e.getMessage());}System.out.println("over");}
}

在这里插入图片描述

Throwable类中定义了一些查看方法:

  • public String getMessage() :获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。
  • public String toString() :获取异常的类型和异常描述信息(不用)。
  • public void printStackTrace() :打印异常的跟踪栈信息并输出到控制台。
  1. finally 代码块

有一些特定的代码无论异常是否发生,都需要执行。因此我们就会使用finally关键字来解决这个问题

import java.io.IOException;public class ExceptionDemo {public static void findFile(String file) throws IOException{int index = file.lastIndexOf(".");String prefix = file.substring(index);if (prefix.equals(".txt")){System.out.println("文件格式正确");}else {throw new IOException("文件格式不正确");}}public static void main(String[] args){String file = "a.html";try {findFile(file);} catch (IOException e) {e.printStackTrace();System.out.println(e.getMessage());} finally {System.out.println("不管出不出现异常都要执行!");}System.out.println("over");}
}

在这里插入图片描述

  1. 多个异常进行捕获的方式:
  • 多个异常分别处理。
  • 多个异常一次捕获,多次处理。
  • 多个异常一次捕获一次处理。

注意:

  • 运行时异常被抛出可以不处理。即不捕获也不声明抛出。
  • 如果finally有return语句,永远返回finally中的结果,避免该情况.
  • 如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常。
  • 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出

自定义异常

异常类如何定义:

  1. 自定义一个编译期异常: 自定义类 并继承于 java.lang.Exception 。
    代码示例:
	// 业务逻辑异常
public class MyException extends Exception {/*** 空参构造*/public MyException () {}/**** @param message 表示异常提示*/public MyException (String message) {super(message);}
}
  1. 自定义一个运行时期的异常类:自定义类 并继承于 java.lang.RuntimeException 。
public class MyException extends RuntimeException {/*** 空参构造*/public MyException () {}/**** @param message 表示异常提示*/public MyException (String message) {super(message);}
}

总的来说就是,继承异常类Exception或者RuntimeException,重写空参构造方法和有参构造方法。

欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

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

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

相关文章

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

办理河南公司企业信用等级3A证书流程和条件

企业信用等级3A证书属于一种荣誉资质&#xff0c;是提升企业公信力和影响力保障的一项资质。信用等级是信用 (资信)评估机构根据企业资信评估结果对企业信用度划分的等级类别&#xff0c;它反映了企业信用度的高低。AAA信用等级是一种等级划分。代指企业的信用经过行业、机构评…

零成本搭建个人图床服务器

前言 图床服务器是一种用于存储和管理图片的服务器&#xff0c;可以给我们提供将图片上传后能外部访问浏览的服务。这样我们在写文章时插入的说明图片&#xff0c;就可以集中放到图床里&#xff0c;既方便多平台文章发布&#xff0c;又能统一管理和备份。 当然下面通过在 Git…

中药材图像识别:中医与深度学习的融合(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 一、引…

flink的窗口

目录 窗口分类 1.按照驱动类型分类 1. 时间窗口&#xff08;Time window&#xff09; 2.计数窗口&#xff08;Count window&#xff09; 2.按照窗口分配数据的规则分类 窗口API分类 API调用 窗口分配器器&#xff1a; 窗口函数 增量聚合函数&#xff1a; 全窗口函数…

MySQL高级-MVCC-原理分析(RC级别)

文章目录 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView2、先来看第一次快照读具体的读取过程&#xff1a;3、再来看第二次快照读具体的读取过程: 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView 我们就来分析事务5中&#xff0c;两…

VBA代码解决方案第十五讲:如何对单元格区域进行高亮显示

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

【操作系统期末速成】EP06 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点十四&#xff1a;同步互斥的基本概念2.2 考点十五&#xff1a;实现临界区互斥的基本方法2.3 考点十六&#xff1a;信号量的含义及常用信号量 一、前言&#x1f680;&#x1…

操作系统概论(二)

一、单项选择题(本大题共20小题&#xff0c;每小题1分&#xff0c;共20分) 在每小题列出的四个备选项中只有一个选项是符合题目要求的&#xff0c;请将其代码填写在题后的括号内。错选、多选或未选均无分。 1&#xff0e;操作员接口是操作系统为用户提供的使用计算机系统的手…

Vitis IDE 艰难切换--从传统 Vitis GUI 到 2024.1 统一软件界面

目录 1. 简介 2. 界面展示 2.1 启动 2.2 Flow Navigator 2.1.1 C Simulation Dialog 2.1.2 C Synthesis 2.1.3 C/RTL Co-simulation 2.1.4 Implementation 2.1.5 Package 3. C Synthesis 详解 3.1 Classic Configuration Settings 3.1.1 config_array_partition 3…

MySQL进阶:存储过程和函数

存储过程和函数 1. 简介2. 创建存储过程使用MySQL工作台创建存储过程 3. 删除存储过程4. 参数带默认值的参数参数验证输出参数 5. 变量6. 函数7. 其他约定 1. 简介 存储过程三大作用&#xff1a; 储存和管理SQL代码&#xff08;置于数据库中&#xff0c;与应用层分离&#xf…

快递物流仓库管理系统java项目springboot和vue的前后端分离系统java课程设计java毕业设计

文章目录 快递物流仓库管理系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 快递物流仓库管理系统 一、项目演示 快递物流仓库管理系统 二、项目介绍 语言: Java 数据库&#xff1a;MySQL 前…

宝塔安装rabbitMQ实战

服务器环境说明 阿里云服务器、宝塔、centos7 一、下载erlang 原因&#xff1a;RabbitMQ服务端代码是使用并发式语言Erlang编写的&#xff0c;安装Rabbit MQ的前提是安装Erlang。 下载地址&#xff1a;http://www.erlang.org/downloads 下载对应的版本&…

山东省著名烈士孙善师孙善帅故居布展喜添新篇

人海信息网山东讯&#xff08;张春兄、冯爱云&#xff09; “……他们以钢铁般的意志&#xff0c;坚守共产党员的使命&#xff0c;他们就是泺口九烈士的孙善师孙善帅兄弟&#xff01;”6月28日&#xff0c;对于山东省著名烈士孙善师孙善帅故居来说&#xff0c;又是一个不平凡的…

LabVIEW电压电流实时监测系统

开发了一种基于LabVIEW和研华&#xff08;Advantech&#xff09;数据采集卡的电压电流实时监测系统&#xff0c;通过高效的数据采集和处理&#xff0c;为工业和科研用户提供高精度、实时的电压电流监测解决方案。系统采用研华USB-4711A数据采集卡&#xff0c;结合LabVIEW编程环…

AI论文速读 | 2024[KDD]自适应时空图神经网络中图中奖彩票的预训练识别

题目&#xff1a;Pre-Training Identification of Graph Winning Tickets in Adaptive Spatial-Temporal Graph Neural Networks 作者&#xff1a;Wenying Duan, Tianxiang Fang, Hong Rao, Xiaoxi He 机构&#xff1a;南昌大学&#xff0c;澳门大学 arXiv网址&#xff1a;h…

Python数据分析-股票分析和可视化(深证指数)

一、内容简介 股市指数作为衡量股市整体表现的重要工具&#xff0c;不仅反映了市场的即时状态&#xff0c;也提供了经济健康状况的关键信号。在全球经济体系中&#xff0c;股市指数被广泛用于预测经济活动&#xff0c;评估投资环境&#xff0c;以及制定财政和货币政策。在中国…

IEEE JSTSP综述:从信号处理领域分析视触觉传感器的研究

触觉传感器是机器人系统的重要组成部分&#xff0c;虽然与视觉相比触觉具有较小的感知面积&#xff0c;但却可以提供机器人与物体交互过程中更加真实的物理信息。 视觉触觉传感是一种分辨率高、成本低的触觉感知技术&#xff0c;被广泛应用于分类、抓取、操作等领域中。近期&a…

如何跑起来一个前后端项目

后端部署 第一步配置自己的maven 第二步优先导入自己本地jar包当本地没有在从远程下载 第三步找到配置文件 第四步成功运行后端部署完毕 前端部署 第一步看看项目node_modules有没有文件如果有就是已经安装好了对应的依赖&#xff0c;没有执行npm install 第二步运行即可

决策树划分属性依据

划分依据 基尼系数基尼系数的应用信息熵信息增益信息增益的使用信息增益准则的局限性 最近在学习项目的时候经常用到随机森林&#xff0c;所以对决策树进行探索学习。 基尼系数 基尼系数用来判断不确定性或不纯度&#xff0c;数值范围在0~0.5之间&#xff0c;数值越低&#x…