Java异常入门

 

目录

前言

异常

什么是异常

异常(Exception)和错误(Error)

异常的处理

异常的作用


前言

我们用一个简单情形引入异常:

class Devide{public int divide(int a ,int b ){return a / b ;}
}public class Main{public static void main(String[] args){Devide divide = new Devide();divide.divide(1 ,0) ;}
}

我们假设有这样一段代码,显然,这段代码是有错误的,因为我们使得除数为0,假使运行,我们将得到以下结果:

可以看到,编译器给我们报了 ArithmeticException(算数异常),中断了程序,并告诉我们是由除0引起的,这就是一个最简单的异常。

异常

什么是异常

Java 异常是在程序执行过程中发生的意外情况,它们可以中断正常的程序流程,并提供了一种机制来处理这些意外情况。异常通常分为两种类型:受检异常(Checked Exception)和非受检异常(Unchecked Exception)

  1. 受检异常(Checked Exception)

    • 受检异常是指在编译时被检查的异常,即在代码中必须显式地捕获或声明抛出以避免编译错误。
    • 典型的受检异常包括 I/O 异常(如文件不存在或读写失败)、SQL 异常(如数据库连接错误或查询错误)等。
    • 受检异常通常是可以恢复的,并且程序应该有相应的处理机制来解决这些异常。
  2. 非受检异常(Unchecked Exception)

    • 非受检异常是指在运行时发生的异常,不需要在代码中显式地捕获或声明抛出。
    • 典型的非受检异常包括空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)、类型转换异常(ClassCastException)等。
    • 非受检异常通常是由编程错误引起的,比如访问 null 对象的属性或方法、数组访问越界等。

在 Java 中,所有异常都是 Throwable 类的子类。Throwable 类有两个主要的子类:Exception 和 Error。

异常(Exception)和错误(Error)

  • Exception:Exception 是程序正常运行中可以预料到的意外情况所引发的异常的超类。它又分为受检异常和非受检异常两种。

  • Error:Error 是指程序无法处理的系统错误或资源耗尽等严重问题所引发的异常。与一般的异常不同,Error 通常发生在 JVM 或底层系统中,无法通过代码来解决。

简要的理解,异常往往指的是得到的结果和预期不一致,会中断程序的运行,但其实不代表程序就不能够向下运行了。而错误一旦发生,程序就连运行都做不到了。

异常的处理

Java 提供了一套异常处理机制,通过 try-catch-finally 语句来捕获和处理异常。一个典型的异常处理代码结构如下:

try {// 可能会抛出异常的代码// 比如可能发生除以零的操作、访问 null 对象等
} catch (ExceptionType1 e1) {// 处理 ExceptionType1 类型的异常
} catch (ExceptionType2 e2) {// 处理 ExceptionType2 类型的异常
} finally {// 无论是否发生异常,都会执行的代码块// 通常用来释放资源等清理工作
}

在 try 代码块中,放置可能会引发异常的代码;catch 代码块用来捕获和处理特定类型的异常;finally 代码块中的代码无论是否发生异常都会被执行,通常用来进行资源的释放或清理工作。

除了 try-catch-finally 语句外,还可以使用 throws 关键字来声明方法可能抛出的异常,从而将异常的处理责任交给调用者。

异常的作用

异常机制的最重要作用就是“保护”,我们说,出现异常并不是说程序就完全不能运行了,而是得不到预期的结果。但Java的工程师们为什么要在异常发生时强行中断程序呢?试想刚刚的例子,一个数除以0交给系统去运算,不清楚到底会得到一个什么样的值,如果这时不中断程序,而是继续运行,那之后要是用到了这个值呢?后果是不堪设想的,所以Java的异常机制就是在保护我们程序的健壮性。

本篇博文到此就结束了,新手上路,水平有限,如有错误,还望海涵并指出!

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

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

相关文章

大话设计模式之状态模式

状态模式是一种行为设计模式,它允许对象在其内部状态发生变化时改变其行为。在状态模式中,对象将其行为委托给当前状态对象,从而在不同的状态下执行不同的行为,而不必在对象自身的代码中包含大量的条件语句。 通常,状…

JAVAEE之JavaScript(WebAPI)

1.WebAPI 背景知识 JS 分成三个大的部分 ECMAScript: 基础语法部分( JS 基础语法主要学的是 ECMAScript, ) DOM API: 操作页面结构 BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM. 2.API API 是一个更广义的概念 . 而 WebAPI 是一个更具体的…

matlab使用教程(32)—求解偏微分方程(3)

1求解 PDE 方程组 此示例说明由两个偏微分方程构成的方程组的解的构成,以及如何对解进行计算和绘图。 以如下 PDE 方程组为例 要在 MATLAB 中求解该方程,您需要对方程、初始条件和边界条件编写代码,然后在调用求解器pdepe 之前选择合适的解…

数据转换 | Matlab基于GASF格拉姆角和场一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 基于GASF(Gramian Angular Summation Field)的方法,将一维数据转换为二维图像的步骤描述 标准化数据: 首先,对一维时序数据进行标准化处理&#xf…

【软件工程】详细设计(二)

这里是详细设计文档的第二部分。前一部分点这里 4. 学生端模块详细设计 学生端模块主要由几个组件构成:学生登录界面,成绩查询界面等界面。因为学生端的功能相对来说比较单一,因此这里只给出两个最重要的功能。 图4.1 学生端模块流程图 4.…

SVD图像处理(MATLAB)

使用SVD处理图像模拟演示 参考文献 https://github.com/matzewolf/Image_compression_SVD/blob/master/svd_compress.m MATLAB代码 clc; clearvars; close all;A_orgimread("lena256.bmp"); compr20; A_orgdouble(A_org);A_red svd_compress( A_org, compr ); s…

Kimi精选提示词,总结PPT内容

大家好,我是子云,最近真是觉得Kimi这个大模型,产品体验很棒,能力也是不错,感觉产品经理用心了。 发现一个Kimi 一个小技巧,可以学习到很多高级提示词。 Kimi输入框可以配置常用提示词,同时也可…

C++算法——二分法查找

一、二分查找算法思想和模版 1.算法思想 2.细节处理 3.模板 二、二分查找 1.链接 704. 二分查找 - 力扣(LeetCode) 2.描述 3.思路 先从最经典的题目去切入,思路就是二分查找,这里我们认为,目标值既可以看作为左部…

Twitter Api查询用户粉丝列表

如果大家为了获取实现方式代码的话可能要让大家失望了,这边文章主要是为了节省大家开发时间,少点坑。https://api.twitter.com/2/users/:id/followers ,这个接口很熟悉吧,他是推特提供的获取用户关注者(粉丝&#xff0…

STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式,生成代码四、MDK打开生成项目,编写HAL库的按键检测代码五、运行仿真程序,调试代码 一、功能需求分析 在完成GPIO输入输出案例之后,开始新的功能…

Node.js环境调用百度智能云(百度云)api鉴权认证三步走

方式一 :Postman脚本的方式生成v1版本的认证字符串 Postman脚本下载 下载Postman pre-request Script 设置 Authorization 示例脚本 方式二:在线签名工具生成 (试用于验证编程字符串签名是否有错误) 签名计算工具 https://cloud.baidu.com/signature/index.html …

使用libibverbs构建RDMA应用

本文是对论文Dissecting a Small InfiniBand Application Using the Verbs API所做的中英文对照翻译 Dissecting a Small InfiniBand Application Using the Verbs API Gregory Kerr∗ College of Computer and Information ScienceNortheastern UniversityBoston, MAkerrgccs…

HbnnMall电子商城系统介绍(功能与技术栈)

今天在看我个人网站上的文章时,看到了曾经在2020年自己开发的电商系统。那时我已经入职小米有一段时间了,基本已经对各个业务线,各种业务知识有了系统性的了解和学习,所以想自己动手写一个电商系统,以便进一步提高自己…

ElasticSearch7.8的下载与安装和Kibana 7.8.0工具使用安装

1、ElasticSearch7.8.0下载 elasticsearch: 官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch 链接: https://pan.baidu.com/s/1wAKQoB3nhLhcnBlPfVOLxQ 提取码: t83n kibana: 链接: https://pan.baidu.com/s/156aD9zDdvUv8LFgDEIPoSw 提取码:…

云存储中常用的相同子策略的高效、安全的基于属性的访问控制的论文阅读

参考文献为2022年发表的Efficient and Secure Attribute-Based Access Control With Identical Sub-Policies Frequently Used in Cloud Storage 动机 ABE是实现在云存储中一种很好的访问控制手段,但是其本身的计算开销导致在实际场景中应用收到限制。本论文研究了…

(2024)Ubuntu源码安装多个版本的opencv并切换使用

本人工作会用到x86_64的opencv和aarch64的opencv,所以写下来备忘自用 一、源码编译安装 依赖库安装: sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev o…

上位机图像处理和嵌入式模块部署(qmacvisual图像清晰度)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 做过isp的同学都知道,图像处理里面有一个3A,即自动曝光、自动白平衡和自动对焦。其中自动对焦这个,就需要用输入…

HarmonyOS NEXT应用开发之PersistentStorage:持久化存储UI状态

前两个小节介绍的LocalStorage和AppStorage都是运行时的内存,但是在应用退出再次启动后,依然能保存选定的结果,是应用开发中十分常见的现象,这就需要用到PersistentStorage。 PersistentStorage是应用程序中的可选单例对象。此对…

Vue的学习之旅-part1

Vue的学习之旅-part1 vue介绍vue读音编程范式ES6中不用var声明变量vue的声明、初始化传参使用data中数据时要用this指向 vue中的语法糖MVVM在Vue中, MVVM的各层的对应位置 方法、函数的不同之处 vue介绍 vue读音 Vue 读作 /vju:/ 不要读成v u e Vuex 的x读作叉 不…

Redis高可用技术

一.Redis高可用介绍: 高可用是指:服务器正常访问的时间 衡量的标准是:在多长时间内可以提供正常服务99.9%、99.99%、99.999%等等 但是在Redis语境中, 高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、…