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的异常机制就是在保护我们程序的健壮性。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PDF编辑和格式转换工具 Cisdem PDFMaster for Mac

Cisdem PDFMaster for Mac是一款功能强大的PDF编辑和格式转换工具。它为用户提供了直观且易于使用的界面,使常用功能触手可及,从而帮助用户轻松管理、编辑和转换PDF文件。 软件下载:Cisdem PDFMaster for Mac v6.0.0激活版下载 作为一款完整的…

excel统计分析——协方差分析的作用

参考资料:生物统计学 1、协变量与试验因素的区别 如果把协方差分析资料中的协变量看作多因素方差分析资料中的一个因素,则两类资料有相似之处,但两类资料有本质的不同。在方差分析中,各因素的水平时人为控制的,即使是…

前视声呐目标识别定位(四)-代码解析之启动识别模块

前视声呐目标识别定位(一)-基础知识 前视声呐目标识别定位(二)-目标识别定位模块 前视声呐目标识别定位(三)-部署至机器人 以启动识别模块为例,其余关闭识别模块,启动和关闭声呐…

【管理咨询宝藏48】AA银行信息科技提升分析报告

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏48】AA银行信息科技提升分析报告 【格式】PPT版本,可编辑 【关键词】战略规划、商业分析、管理咨询 【强烈推荐】这是一套市面上非常…

Spark-Scala语言实战(11)

在之前的文章中,我们学习了如何在spark中使用RDD中的cartesian,subtract最终两种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scal…

Prisma ORM 5.12 发布,支持 Cloudflare D1 数据库

昨晚,Prisma ORM 发布了 5.12.0 稳定版本,在此版本中 Prisma ORM 新增了对 Cloudflare D1 的预览支持,现在我们可以选择将本地的 SQLite 数据库逐步迁移到 Cloudflare 上面,从而实现无需额外成本即可构建处理大量用户的应用程序。…

UE4_自定义反射和折射和法线图

UE4 自定义反射和折射和法线图 2020-05-22 09:36 将ReflectionVector和反射图像进行ViewAlignedReflection,输出的textrue和相机位置CameraPosition的onePlus进行Dot点乘之后乘以一个float系数反射度,输出给固有色,就有反射效果了。球型反射。 折射&…

进制转换器(C语言)

目录 1问题: 输入任意进制的数值,可以转换成任意进制的数值(2到36进制); 2思路: 3代码:(需要运用到数据结构栈的知识) 4运行结果: 1问题: 输入任意进制的数…

跨域问题解决方案之CORS

跨域问题解决方案之CORS 文章目录 跨域问题解决方案之CORS概述浏览器的同源策略同源的判定规则目的同源策略的限制范围 浏览器的同源策略为什么会引发跨域问题?CORS规则CORS解决方案CORS方案将请求分为两类举例简单请求预检请求总结学以致用 概述 浏览器安全的基石…

文件操作详解(二)

目录 一.文件的顺序读写1.顺序读写函数(适合于所有的流)1.1 fgetc(读字符)1.2 fputc(写字符)1.3 fgets(读字符串)1.4 fput(写字符串)1.5 fscanf(格式化地读)1.6 fprintf(格式化地写) 2.顺序读写函数(只适用于文件流)2.1 fread(二进…

jupyter Notebook 默认路径修改

1. anaconda prompt 中运行 jupyter notebook --generate-config 命令,将在 C:\Users\Think\.jupyter文件下生成 jupyter_notebook_config.py 文件。 2.在jupyter_notebook_config.py 文件中,找c.NotebookApp.notebook_dir 这个变量, (1)若…

2012年认证杯SPSSPRO杯数学建模A题(第二阶段)蜘蛛网全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 A题 蜘蛛网 原题再现: 第二阶段问题   现在我们假设一个具体的环境。假设有一个凸多边形的区域,蜘蛛准备在这个区域(或其一部分)上结一张网。   问题一: 在区域的边界上安置有若干…

区间概率预测python|QR-CNN-BiLSTM+KDE分位数-卷积-双向长短期记忆神经网络-时间序列区间概率预测+核密度估计

区间预测python|QR-CNN-BiLSTMKDE分位数-卷积-双向长短期记忆神经网络-核密度估计-回归时间序列区间预测 模型输出展示: (图中是只设置了20次迭代的预测结果,宽度较宽,可自行修改迭代参数,获取更窄的预测区间) 注&am…

【chrome扩展】简 Tab (SimpTab)‘每日一句名言’样式

背景:最初参考“每日诗词”发现总是那几句,可以更换API接口完成“每日一句名言” 声明:本人不会ajax及ccs样式,非专业人士,借助CHATGPT代码生成完成。请友善交流。 每一句名言API: "https://api.xygeng.cn/open…

焦糖布丁理论:从用户任务角度重新审视产品价值

一、引言: 在竞争激烈的市场环境中,我们经常会遇到这样的困惑:为什么一款自认为极具创新和品质的产品,却未能获得市场的青睐和认可?焦糖布丁理论为我们提供了一个全新的视角,即”客户并非在购买产品本身&a…

gitlab代码迁移,包含历史提交记录、标签、分支

1、克隆现有的GitLab仓库(http://localhost:8888/aa/bb/cc.git)到本地,包括所有分支和标签 git clone --bare http://localhost:8888/aa/bb/cc.git 2、在gitlab上创建一个空的仓库(http://localhost:7777/aa/bb/cc.git&#xff…

CAD Plant3D 2023 下载地址及安装教程

CAD Plant3D是一款专业的三维工厂设计软件,用于在工业设备和管道设计领域进行建模和绘图。它是Autodesk公司旗下的AutoCAD系列产品之一,专门针对工艺、石油、化工、电力等行业的设计和工程项目。 CAD Plant3D提供了一套丰富的工具和功能,帮助…

Spring Cloud微服务入门(一)

微服务的演变过程 //controller 视图交互层 前端数据处理传给service //1.DAO RequestBody userDAO String id;String type; {"id":"lcs", "type":"lcs"} //2.GET请求 findUserById?id1&typelcsRequestParam String …

电商大数据采集|电商API接口|自动化采集|人工采集

大数据采集是指从海量、异构、分散、动态的网络环境中收集、提取和存储数据的过程。大数据采集主要分为两种方式:自动化采集和人工采集。 1.自动化采集 电商API自动化采集是利用爬虫技术和API等方式,通过编写程序实现对网站或者应用程序中的数据进行自…

用户认证安全性测试

用户认证安全性测试 认证与会话管理认证--Authentication01 常见认证方式02 session认证Session Fixation攻击Session保持攻击 03 Token认证多因素认证session和token区别 04 暴力破解密码的那些事密码设置推荐策略 会话--Authorization 权限控制权限管理方式垂直权限管理水平权…