java:异常处理

news2024/12/23 11:43:01

背景

Java中的异常体系基于几个关键的概念和类,主要包括Throwable类、Exception类(及其子类)和Error类。

异常分类

在这里插入图片描述

1. Throwable 类

  • Throwable 是所有错误与异常的超类。
  • 它有两个直接子类:ErrorException

2. Error 类

  • Error 类及其子类表示的是JVM(Java虚拟机)运行时的内部错误和资源耗尽等严重情况。
  • 这些错误通常是Java运行时环境自身的问题,而不是程序可以控制的。
  • 常见的Error子类包括OutOfMemoryError(内存溢出错误)、StackOverflowError(栈溢出错误)等。
  • 一般情况下,程序不需要捕获或处理Error

3. Exception 类

  • Exception 类及其子类表示的是程序运行时发生的可以被捕获或需要被程序处理的异常情况。
  • Exception类分为两大类:Checked Exceptions(受检异常)和Unchecked Exceptions(非受检异常,也称为运行时异常)。
3.1 Checked Exceptions(受检异常)
  • 编译时异常,必须在方法签名中声明,调用者必须处理或继续声明抛出。
  • 常见的受检异常包括IOExceptionSQLException等。
  • 这类异常通常是由于外部错误导致的,如文件不存在、网络问题等。
3.2 Unchecked Exceptions(非受检异常/运行时异常)
  • 运行时异常,不需要在方法签名中声明,编译器也不会检查。
  • 常见的运行时异常包括NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组越界异常)、ClassCastException(类型转换异常)等。
  • 这类异常通常是由于程序逻辑错误导致的。

异常处理

Java提供了try-catch-finally-throw-throws五个关键字来处理异常。

  • try 块:用于包裹可能发生异常的代码。
  • catch 块:用于捕获并处理try块中抛出的异常。
  • finally 块:无论是否发生异常,finally块中的代码都会被执行(除非JVM退出)。
  • throw 关键字:用于显式地抛出异常。
  • throws 关键字:用于在方法签名中声明该方法可能抛出的异常,让调用者知道需要处理这些异常。

try catch

public class StudentTest {
    public static void main(String[] args) {
        try {
            Student s = new Student();
            //数据非法,需要处理异常对象
            //调用此方法进入到catch代码块中
            s.regist(-1001);
        } catch (Exception e) {
        	//控制台输出:您输入的数据非法
            System.out.println(e.getMessage());
        }
    }
}

throw

class Student{
    private int id;
	
    public void regist(int id) throws Exception {
        if (id > 0){
            this.id = id;
        }else {
            //手动抛出异常对象
            throw new Exception("您输入的数据非法!");
        }
    }
}
1234567891011121314151617181920212223242526

throws

public static void method1() throws IOException {
    File file = new File("hello.txt"); //文件找不到,会报异常
    FileInputStream fis = new FileInputStream(file);

    int data = fis.read();//异常
    while (data != -1){
        System.out.println((char)data);
        data = fis.read(); //异常
    }
    fis.close();//异常
}

自定义异常类

开发者可以通过继承Exception类或其子类来创建自定义异常,以表示程序中特有的错误情况

  1. 自定义类继承于现有的异常类结构:RuntimeException、Exception
  2. 提供全局常量:serialVersionUID 序列版本号,用于标识类
  3. 提供重载的构造器
//自定义异常类
public class MyException extends RuntimeException{
    static final long serialVersionUID = -7034897190745766939L;
 
    public MyException() {
 
    }
    public MyException(String msg) {
        super(msg);
    }
}
 
//学生类
class Student{
    private int id;
 
    public void regist(int id){
        if (id > 0){
            this.id = id;
        }else {
            throw new MyException("不能输入负数");
        }
    }
}
 
//测试类
class Test{
    public static void main(String[] args) {
        try {
            Student s = new Student();
            s.regist(-1001);
 
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
12345678910111213141516171819202122232425262728293031323334353637

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

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

相关文章

【OpenAI o1思维链CoT必看论文】谷歌“思维链提示“让AI更懂人类推理

原创 超 超的闲思世界 AI的推理能力正迎来一场重大突破。谷歌大脑团队最新开发的"思维链提示"方法,让大型语言模型在复杂推理任务上展现出惊人的进步。这项创新技术无需对模型进行额外训练,却能显著提升AI的推理能力,让机器的思…

python命令行怎么换行

在命令行中“>>>”是python的输入提示符,按回车键则表示输入结束。那么如何在命令行中换行呢? 换行方法:\ 如: >>> print aaa; \ ... print bbb; \ ... print ccc 注意“;”的使用。python本身语句…

excel单元格增加可选下拉列表

excel单元格增加可选下拉列表 下拉设置:数据–数据验证-选择序列-填写来源(来源数据用英文逗号分隔)(是,否)- 区域应用:选定区域-数据验证-是-确认

2024年第十届信息学与商业工程国际会议(ICIBE 2024)将在泰国曼谷召开!

2024年第十届信息学与商业工程国际会议 (ICIBE 2024) 将于2024年12月20日-22日在泰国曼谷举办。ICIBE 2024由泰国兰实大学主办,中国澳门大学和菲律宾马普亚大学提供技术支持。本次会议为来自世界各地的专业人士、科学家、工程师、教育工作者、学生和研究人员提供了一…

tauri程序加载本地图片或者文件在前端页面展示

要想在前端页面中展示本地文件或者文件夹,需要使用convertfilesrc这个api,可以非常方便的展示内容,官方文档:tauri | Tauri Apps convertFileSrc甚至位于invoke之前,但我却一直没有注意到它,一方面是因为&…

街头摊贩检测系统源码分享

街头摊贩检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

磷酸化多肽及其修饰方法

【知识与技术分享~~~】 磷酸化多肽主要指肽链中的Ser、Tyr和Thr残基的侧链羟基被修饰成酸式磷酸酯多肽,有L构象和D构象之分,其结构如下: 楚肽生物提供 在固相多肽合成SPPS(Solid-PhasePeptide Synthesis)采用的是Fmoc-…

Day100 代码随想录打卡|动态规划篇--- 01背包问题(一维数组版)

题目(卡玛网T46): 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&am…

2024外研社综合能力大赛第一场真题

网上找滴~自用 审核不过,备考指南发知乎了:https://zhuanlan.zhihu.com/p/730698685

基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue

基于GIKT深度知识追踪模型的习题推荐系统 目录结构 Flask-BackEnd flask后端 app 后端主体文件 alg 深度学习模块 data 数据集data_process.py 数据预处理gikt.py GIKT模型pebg.py PEBG模型params.py 一些参数train.py 仅模型训练train_test.py 模型训练和测试-五折交叉验证t…

C++ 语言课程笔记

C 语言课程笔记 C语言程序设计第四版——谭浩强著,此书中的代码题大部分已经在本文中展示,以及南开大学 C 语言上机题库 100 题的作答,如果有作答不正确的地方或者可优化的地方,欢迎指正,谢谢! 001 屏幕输出…

一招搞定苹果安卓跨系统传输,文件大小再也不是问题

在当今多元化的科技市场中,众多手机品牌竞相推出各自的产品,每个品牌都力图打造独特的用户体验和生态系统。然而,这种品牌之间的多样性也带来了一定的挑战,尤其是在不同品牌体系之间互联互通性方面。由于每个品牌都有自己的操作系…

VMware虚拟机Centos操作系统——配置docker,运行本地打包的镜像,进入conda环境(vmware,docker新手小白)

1.docker-centos运行sudo yum install -y yum-utils报错 遇到问题 解决: 进入/etc/yum.repos.d目录下找到 CentOS-Base.repo,执行下面两个命令: cp CentOS-Base.repo CentOS-Base.repo.backupvi CentOS-Base.repo 进入后改成&#x…

前缀和(4)_除自身以外数组的乘积

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 前缀和(4)_除自身以外数组的乘积 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录…

央国企董事会管理方案,数字化助力会议、制度、信披、投资全过程全方位管理

董事会建设是中国特色现代企业制度的重要内容。近日,国务院国资委召开中央企业董事会建设工作推进会:到明年年底,中央企业集团和二级子企业层面董事会建设要取得重要实质性进展,董事会制度更加健全、运行更加规范,作用…

如何进行光伏项目卫星踏勘?

一、卫星地图选址 1. 数据获取 卫星踏勘的第一步是获取高分辨率的卫星图像。利用卫星遥感技术,可以获取项目候选区域的地形地貌、植被覆盖等详细信息。这些数据通过专业的遥感图像处理软件进行分析和解译,提取出对光伏电站建设有重要影响的关键因素&am…

【Git使用】向Gitee/Github上传代码时配置gitignore忽略文件

概述: 在进行项目开发时,尤其是使用Git进行版本控制时,我们经常会遇到一些不需要上传到代码仓库的文件,比如编译生成的文件、临时文件、日志文件等。这时候,我们就需要使用.gitignore文件来忽略这些文件。本文将介绍如…

单点登录sso部署

文章目录 同域下的单点登录原理不同域下的单点登录原理 第三方 OAuth2 授权登录支持第三方登录 本地用keycloak实现1、生成证书2、编写docker-compose.yml文件3、创建持久化数据目录4、接下来启动docker-compose5、访问keycloak 单点登录英文全称Single Sign On,简称…

宠物浮毛难清理,希喂、小米、美的宠物空气净化器该选哪款?

养猫养出病来说的就是我了。 养猫之前幻想的一人一猫幸福生活还没一个月,我就进了医院。我自认为是很爱干净的人,养猫后打扫得更勤快了,早晚都给猫咪梳毛。平时卫生也没少搞,家里也是很干净的,实在不明白为什么会过敏…

语义分割性能提升---通过优化损失改进分割效果

本文主要总结最近的调研调试结果,介绍通过改进损失来提升语义分割的分割效果;当然还有其他途径,比如蒸馏(提升分割效果)、剪枝(提升fps),之前博客有总结,此处不做介绍。 …