Java中的异常基础知识

目录

什么是异常?

1.算术异常

2.数组越界异常

 3.空指针异常

4.输入不匹配异常

Java异常体系

异常的处理

防御式编程:

事后认错

异常处理流程

自定义异常


什么是异常?

在Java中,将程序执行过程中发生的不正常行为称为异常

1.算术异常

public static void main(String[] args) {System.out.println(10/0);}

2.数组越界异常

public static void main(String[] args) {int[] array = new int[10];System.out.println(array[20]);}

 

 3.空指针异常

public static void main(String[] args) {int[] array = null;System.out.println(array.length);}

4.输入不匹配异常

 public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();System.out.println(n);}

 

 类似的异常还有很多,就不一一举例了.

Java异常体系

异常分为俩类,一类是编译时异常,主要发生在编译的时候,需要处理.一类是运行时异常,主要发生在程序运行时需要处理. 
对于受查异常(编译时异常),程序如果想要编译,必须处理掉这个异常,此时程序才能运行

Throwable: 是异常体系的顶层类,有俩个重要的子类 Error 和 Exception
Error(错误): 指的是java虚拟机无法解决的严重问题,比如JVM内部错误,资源耗尽等,需要程序员检查问题,自己解决
Exception(异常): 异常产生后程序员可以通过代码进行处理,使程序继续执行.

异常的处理

如上面几个例子所见,如果异常不做处理,当程序发生异常就会把异常交给JVM,会立即终止程序了.所以在编写代码的时候,我们需要对可能发生的异常进行处理

防御式编程:

比如现在要写一个游戏,事前防御:

boolean ret = false;
ret = 登陆游戏();
if (!ret) {
处理登陆游戏错误;
return;
}
ret = 开始匹配();
if (!ret) {
处理匹配错误;
return;
}
ret = 游戏确认();
if (!ret) {
处理游戏确认错误;
return;
}

代码每一步都进行是否发生异常判断

事后认错

try {
登陆游戏();
开始匹配();
游戏确认();
}catch(登陆游戏异常){处理登陆游戏异常;
}catch (开始匹配异常) {
处理开始匹配异常;
} catch (游戏确认异常) {
处理游戏确认异常;
}

先把一些事务放到try中,这些事务都可能出现异常,catch里面对try可能出现的异常进行捕获,捕获后程序可以继续执行

throw 和 throws区别

throw 是抛出一个异常,如 throw new RuntimeException(),手动抛出一个运行时异常
throws是声明异常,一般在方法中声明,告诉调用者,该方法可能出现这个异常,让它们去处理

异常处理流程

程序先执行 try 中的代码
如果try中的代码出现异常,就会结束try中的代码,看和catch中的异常类型是否匹配
如果找到匹配的异常类型就执行,catch中的代码
如果没有找到匹配的异常类型,就会将异常向上传递给上层调用者
无论是否找到匹配的异常类型,finally中的代码都会在该方法结束之前被执行
如果上层调用者也没有处理的异常,就继续向上传递
一直到 main 方法也没有合适的代码处理异常,就会交给JVM 来进行处理,此时程序会异常终止

自定义异常

定义一个类继承异常类(Exception/RunntimeException/IOException),实现这个类的构造方法

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

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

相关文章

GDB之保存已经设置的断点(十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

postgresql-窗口函数种类

postgresql-聚合窗口函数 聚合函数排名窗口函数案例1案例2 取值窗口函数环比增长率同比增长率 聚合函数 常用的聚合函数,例如 AVG、SUM、COUNT 等,也可以作为窗口函数使用 --计算移动平均值 select saledate, amount, avg(amount) over (order by sale…

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏

文章目录 前言开始项目网格生成Block方块脚本俄罗斯方块基类,绘制方块形状移动逻辑限制移动自由下落下落后设置对应风格为不可移动类型检查当前方块是否可以向指定方向移动旋转逻辑消除逻辑游戏结束逻辑怪物生成源码参考完结 前言 当今游戏产业中,经典游…

Java替换 html 中隐藏的空格字符

前言 有时候前端传过来的 json 字符串,包含了隐藏的空格 &NBSP 字符,在后端 Debug 的时候可以看到是 ,但 system.out.print() 打印出来的是正常的空格,这样看着正常但其实放入 fastjson 中去做解析会失败,所以我…

U8用友ERP本地部署异地远程访问:内网端口映射外网方案

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上,点击开始菜单栏,打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

python使用钉钉机器人给钉钉发送消息

import requestsdef dingmessage(msg):urlhttps://oapi.dingtalk.com/robot/send?access_token2c5e2b764129e936ba9c43713a588caa7eeb168c132223a91ba97d80a6fee337data{msgtype:text,text:{content: 通知:msg}}resrequests.post(url,jsondata)

【数据结构】基于不同策略的英文单词的词频统计和检索系统实验报告

基于不同策略的英文单词的词频统计和检索系统实验报告 实验任务 一篇英文文章存储在一个文本文件中,分别基于线性表、二叉排序树和哈希表不同的存储结构,实现单词词频的统计和单词的检索功能。同时计算不同检索策略下的ASL,通过比较ASL的大小,对不同检索策略的时间性能做出…

界面组件DevExpress WinForms v23.1 - 增强的图表、甘特图功能

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

使用sql profile 稳定执行计划的案例

文章目录 1.缘起2.变慢的sql3.检查瓶颈4.解决办法4.1 SQLTXPLAIN 也称为 SQLT4.11 下载coe_xfr_sql_profile.sql4.12 使用方法4.13 执行coe_xfr_sql_profile.sql4.14 执行coe_xfr_sql_profile.sql产生的sql profile文件4.15 验证 4.2 SQL Tuning Advisor方式4.21 第一次Tuning …

冠达管理:Arm上市首日大涨25%,成为年度美股规模最大IPO

9月15日清晨,软银旗下芯片规划公司ARM在纳斯达克交易所首日上市,收盘大涨近25%,市值达到679亿美元,成为本年度美股规模最大的IPO。Arm的美国存托股票开盘价为每股56.1美元,比51美元IPO定价高出10%,随后稳步…

Vue框架中监测数组变化的方法

一 变更方法 调用 push()方法 会直接影响ui变化 <template> <div><ul><li v-for"(item,index) in nums " :key"index"></li></ul> </div> <button click"add">添加数据</button> </…

Talk | ICCV‘23北京通用人工智能研究院黄江勇:ARNOLD-三维场景中基于语言的机器人任务学习

本期为TechBeat人工智能社区第531期线上Talk&#xff01; 北京时间9月14日(周四)20:00&#xff0c; 北京通用人工智能研究院实习研究员—黄江勇的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “ARNOLD-三维场景中基于语言的机器人任务学习”&…

理解网络通信的基础:OSI七层模型与TCP/IP五层模型

在今天的数字化世界中&#xff0c;网络通信已经成为我们日常生活和商业活动的重要组成部分。为了更好地理解和管理网络通信&#xff0c;网络工程师和管理员使用不同的模型来组织和解释网络协议和通信过程。本文将介绍两种最重要的网络模型&#xff1a;OSI七层模型和TCP/IP五层模…

机器学习实战-系列教程8:SVM分类实战3非线性SVM(鸢尾花数据集/软间隔/线性SVM/非线性SVM/scikit-learn框架)项目实战、代码解读

&#x1f308;&#x1f308;&#x1f308;机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 SVM分类实战1之简单SVM分类 SVM分类实战2线性SVM SVM分类实战3非线性SVM 4、非线性SVM 4.1 创建非线性数据 from sklearn.data…

奶牛个体识别 奶牛身份识别

融合YOLOv5s与通道剪枝算法的奶牛轻量化个体识别方法 Light-weight recognition network for dairy cows based on the fusion of YOLOv5s and channel pruning algorithm 论文链接 知网链接 DOI链接 该文章讨论了奶牛花斑、光照条件、不同剪枝方法、不同剪枝率对准确率的影响…

云原生Kubernetes:pod基础与配置

目录 一、理论 1.pod 2.pod容器分类 3.镜像拉取策略 4.pod 的重启策略 二、实验 1.Pod容器的分类 2.镜像拉取策略 三、问题 1.apiVersion 报错 2.pod v1版本资源未注册 3.格式错误 4.取行显示指定pod信息 四、总结 一、理论 1.pod (1) 概念 Pod是kubernetes中…

python LeetCode 刷题记录 20

题目 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右…

【Java IO流 - 中秋活动特供】流的分类,API使用,文件操作

博主&#xff1a;_LJaXi 专栏&#xff1a; Java | 从跨平台到跨行业 开发工具&#xff1a;IntelliJ IDEA Community Edition 2022.3.3 Java IO流 中秋特供啦 &#x1f96e;Java Io &#x1f354;什么是流流的分类文件字节输入流1. 条件循环解决1 (2) 读取特性 2. 数组存储解决 …

在CIFAR-10数据集上构建ResNet-18模型(pytorch版)

文章目录 1. 构建ResNet模型1.1 前置条件1.2 构建Residual Block1.3 构建ResNet-181.4 模型测试 2. 训练与评估2.1 数据预处理与加载2.2 模型训练2.3 模型评估 Reference 1. 构建ResNet模型 我们将使用PyTorch框架来实现一个简化版的ResNet-18模型。我们的目标是构建一个可以在…

固定资产管理口号标语怎么写

在现代企业管理中&#xff0c;固定资产的管理是至关重要的一环。它不仅关系到企业的经济效益&#xff0c;也影响到企业的运营效率和稳定性。因此&#xff0c;我们需要一种既富有创意又实用有效的口号来引导我们的固定资产管理工作。 明确一个观点  我们要明确一个观点&#…