Java中的异常:理解与处理编程中的“预期之外”

news2024/10/6 6:04:46

文章目录

    • 什么是Java 异常?
    • Java中异常有哪些类型?
    • 怎么处理编译时异常?
    • 总结

今天咱们聊聊Java世界里不可或缺的一部分——异常(Exception)。就像人生中的起起落落,编程世界也充满了不可预知的风险和状况,这就是我们今天的主角“异常”登场的时刻。

什么是Java 异常?

首先来聊聊什么是Java 异常,想象你在世界杯决赛中射门,突然,足球爆了!这就是异常——不期而至的问题。在Java中,异常是在程序执行期间发生的事件,它打断了正常的指令流程。就好比足球比赛需要一个完好无损的足球,我们的程序也需要一个“异常”处理机制来确保比赛能够继续。

Java中异常有哪些类型?

Java的异常像是一棵繁茂的家谱树。顶端是Throwable,下边分为两大支:ErrorException
在这里插入图片描述

  • Error: 这是你们永远不希望遇到的重量级角色,比如OutOfMemoryError。它们通常是JVM故障的表现,反正遇到它们,一般你的程序就玩完了,就像足球场塌了一样。

  • Exception: 这是我们常说的异常,它又分为两个分支:RuntimeException和其他。

    • RuntimeException,运行时异常,也称为非受检异常——这些家伙玩起“偷袭”,不需要你显式处理,常见的比如NullPointerException(空指针异常)。就像场上的球员突然地滑了一跤,你很难事先预知和避免。

    • 其他异常,它们是受检异常(Checked Exceptions),必须得到妥善处理,否则编译器就不高兴了,程序就不能顺利运行。就好比规则确定比赛中必须穿鞋,你不按规则来,裁判员(编译器)会毫不留情地吹响哨声。

怎么处理编译时异常?

面对这些爱搞事的编译时异常,你得有准备,以下是几种方法。

  1. 声明异常
    在 Java 中,当前执行的语句必属于某个方法。Java 解释器调用 main 方法开始执行一个程序。每个方法都必须声明它可能抛出的必检异常的类型。这称为声明异常( declaring exception)。只对编译时异常进行声明,、告知方法的调用者有异常。

    为了在方法中声明一个异常,就要在方法头中使用关键字 throws

    如果方法没有在父类中声明异常,那么就不能在子类中对其进行继承来声明异常。

    再举个栗子:
    如果你认为这次犯规超出了你的处理范围,你可以选择将这个问题上报给裁判(向上抛出异常),让比赛的下一个环节来处理这个问题。这就是我们的throws关键字的作用。

    public void readFile() throws FileNotFoundException {
        // 若文件不存在,异常会被抛给readFile()方法的调用者
        FileReader file = new FileReader("还是我不存在.txt");
    }
    
  2. 捕捉异常: 使用try-catch块。想象场上发生犯规,裁判员(编译器)吹响了哨声,try就是你的防御策略,它告诉裁判“看我怎么巧妙解围”。catch就是具体怎么解围的方案,无论是回传给守门员还是直接开大脚。

    举个栗子:

    try {
        // 这里尝试执行某些动作
        file = new FileReader("我不存在.txt");
    } catch (FileNotFoundException e) {
        // 哦豁,文件找不到,怎么办?
        System.out.println("别慌,换个文件试试!");
    }
    
  3. 抛出异常

    检测到错误的程序可以创建一个合适的异常类型的实例并抛出它,这就称为抛出一个异常(throwing an exception)。

    举个例子:

    假设你正在写一个简单的银行账户管理程序,其中有一个方法是用于提取现金(withdraw),该方法接收一个参数表示要提取的金额。我们知道,账户里的金额是有限的,如果尝试提取超过账户余额的金额时,就会引发一个异常。

    现在,让我们来看一下这个方法的实现:

    public void withdraw(double amount) throws InsufficientFundsException {
       if (amount > balance) {
          throw new InsufficientFundsException("提取金额超过账户余额");
       }
       balance -= amount;
       System.out.println("成功提取现金:" + amount);
    }
    

    在上面的代码中,我们首先进行判断,如果提取的金额大于账户余额(balance),那么我们就会抛出一个自定义的异常(InsufficientFundsException),并在异常的构造方法中传入一条错误信息。

注意:声明异常的关楗字是 throws, 抛出异常的关键字是 throw。

总结

本文通过比赛的有趣比喻,概述了Java中异常的概念和分类。我们探讨了Error和Exception之间的区别,并着重介绍了如何处理编译时异常。现在,每当程序中出现非预期事件时,你将拥有处理它们的策略和技巧。正如足球比赛中,每当发生意料之外的情况时,如果裁判员、教练和球员都做好了准备,比赛仍然可以顺利进行。同理,编写代码时,我们也应该做好异常处理的准备,让程序的比赛继续下去。别忘了,优秀的程序员是那些知道如何备足“安全网”的人!

如果文章有任何问题,欢迎指出!
欢迎大家访问我的个人博客 无限进步的博客

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

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

相关文章

微信小程序适配方案:rpx(responsive pixel响应式像素单位)

小程序适配单位:rpx 规定任何屏幕下宽度为750rpx 小程序会根据屏幕的宽度自动计算rpx值的大小 Iphone6下:1rpx 1物理像素 0.5css 小程序编译后,rpx会做一次px换算,换算是以375个物理像素为基准,也就是在一个宽度…

算法备胎hash和队列的特征——第五关青铜挑战

内容1.Hash存储方式2.Hash处理冲突的方式3.队列存储的基本特征4.如何使用链表来实现栈 1.Hash 基础 1.1Hash的概念和基本特征 哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出&#…

每日一题 2048. 下一个更大的数值平衡数(枚举)

乍一看没什么想法,但它的 x 是有限的,而题目规定的数值平衡数的要求很严格,相对来说只有少部分数满足要求,所以想到了枚举的方法通过寻找所有在范围内的全排列中满足数值平衡数的要求的数,找到最接近 n 的一个官方给出…

uniapp实战 —— 竖排多级分类展示

效果预览 完整范例代码 页面 src\pages\category\category.vue <script setup lang"ts"> import { getCategoryTopAPI } from /apis/category import type { CategoryTopItem } from /types/category import { onLoad } from dcloudio/uni-app import { compu…

RabbitMQ使用指南

介绍主要特点常用插件使用RabbitMQ的插件常用插件列表 应用场景Kafka与RabbitMq的区别主要优缺点安装步骤插件安装步骤 使用RabbitMqJava代码示例拓展 介绍 RabbitMQ是由Erlang语言开发的&#xff0c;基于AMQP&#xff08;高级消息队列协议&#xff09;协议实现的开源消息代理…

皮卡丘软件的使用教程,python皮卡丘编程代码

本篇文章给大家谈谈皮卡丘软件的使用教程&#xff0c;以及python皮卡丘编程代码&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 嗨害大家好鸭&#xff01;我是小熊猫❤ 昨天企鹅裙里有小伙伴说想让我用Python整个桌面小挂件~ 做个日历什么的感觉不够好玩~ 今…

智能统计账户支出,掌控财务状况,轻松修改明细。

在这个快节奏的时代&#xff0c;我们的生活每天都在发生着变化。无论是工资收入、购物消费&#xff0c;还是房租支出、投资理财&#xff0c;我们的财务状况也因此变得日益复杂。那么&#xff0c;有没有一种方法可以让我们轻松掌握自己的财务状况&#xff0c;实现智慧理财呢&…

springboot助农管理系统

springboot助农管理系统 源码获取&#xff1a; https://docs.qq.com/doc/DUXdsVlhIdVlsemdX

小科普:什么是 API(应用程序编程接口)

API 是一种为客户提供服务的方式。 编者按&#xff1a;何为API&#xff1f;如果你在百度百科上搜索&#xff0c;你会得到如下结果&#xff1a;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的…

JWT介绍及演示

JWT 介绍 cookie(放在浏览器) cookie 是一个非常具体的东西&#xff0c;指的就是浏览器里面能永久存储的一种数据&#xff0c;仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成&#xff0c;发送给浏览器&#xff0c;浏览器把cookie以kv形式保存到某个目录下的文本…

Ubunutu18.04 ROS melodic 无人机 XTDrone PX4 仿真平台配置

一、依赖安装 sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python-pip python3-pip gawk pip2 install pandas jinja2 pyserial cerberus pyulog0.7.0 n…

【博客园美化】博客园简单动态背景美化(css个人现写的,不喜勿喷)

效果如图&#xff08;背景是动态的&#xff09; 效果参见&#xff1a; 浅吟清风 的博客园 1、前置操作 1、有一个博客园账号&#xff1b; 2、 登陆博客园&#xff0c;进入设置&#xff1b; 3、 选择“博客设置”-> “博客侧边栏公告”-> 申请JS权限&#xff08;图片展…

6.19二叉搜索树中的众数

算法&#xff1a; 提到二叉搜索树&#xff0c;一定是中序遍历&#xff01; 双指针法&#xff1a; pre指向当前节点cur的前一个节点&#xff0c;如果cur.val pre.val&#xff0c;count&#xff0c;count用来统计该数值出现的频率 如果 频率count 等于 maxCount&#xff08;最…

交付《啤酒游戏经营决策沙盘》的项目

感谢首富客户连续两年的邀请&#xff0c;交付《啤酒游戏经营决策沙盘》的项目&#xff0c;下周一JSTO首席学习官Luna想让我分享下系统思考与投资理财&#xff0c;想到曾经看过的一本书《深度思维》&#xff0c;看到一些结构来预判未来。不仅仅可以应用在企业经营和组织发展上&a…

tomcat篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、Tomcat是什么?二、什么是Servlet呢?三、什么是Servlet规范?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、To…

【Fastadmin】利用 build_select 做一个树状下拉选择框

1.效果展示 系统crud生成的下拉分类有些不是很好看&#xff0c;并且选择困难&#xff0c;看不出级差&#xff0c;效果如下&#xff1a; 经过 build_select 加工后的效果,美观好看&#xff0c;并添加上搜索功能: 2. 首先需要写一个树状图的数据格式 protected $datalist []; pu…

科学指南针走进江南大学,探索科研绘图与3D Max软件应用的精彩世界

2023年11月23日&#xff0c;江南大学迎来了一场精彩的科学指南针线下讲座&#xff0c;该讲座以探索科研绘图与3D Max软件应用为主题&#xff0c;通过专家讲座和实践操作&#xff0c;帮助学生了解科研绘图的重要性和3D Max软件在科研领域的广泛应用&#xff0c;吸引了大量感兴趣…

不一样的年会彩瞳推荐,绮芙莉多款彩瞳彰显个性

临近年底&#xff0c;各种公司年会、跨年晚会活动也逐渐排上日程&#xff0c;出席这种正式场合&#xff0c;每个人都有自己的“杀手锏”&#xff0c;从发型妆容到穿搭都是变美小细节&#xff0c;作为心灵之窗的双眸&#xff0c;更需要一副彩瞳来提升我们的眼妆质感&#xff0c;…

《树莓派不吃灰》第二十四期:懒是第一生产力,为树莓派安装可视化开源管理面板1Panel

最近有哥们推荐了一个现代化Linux开源管理面板1Panel&#xff0c;开源且稳定&#xff0c;懒是第一生产力&#xff0c;虽然命令行很灵活&#xff0c;但图形化界面真的是懒人刚需&#xff0c;本期在树莓派部署一下1Panel&#xff0c;让树莓派Linux运维更省力&#xff0c;进一步降…

主存储器与CPU的连接

目录 一. 单块存储芯片与CPU的连接二. 多块存储芯片与CPU的连接2.1 位扩展2.2 字扩展2.3 字位扩展 三. 译码器知识点的补充 \quad 一. 单块存储芯片与CPU的连接 \quad \quad \quad 暴露出的引脚都是与CPU连接的 上面这个是88位的存储芯片 我们可以看到有8个字, 每个字的字长是8…