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

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)

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

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

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

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

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

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

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

🌈🌈🌈机器学习 实战系列 总目录 本篇文章的代码运行界面均在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中…

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

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

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

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

flink on yarn任务中文乱码问题解决记录

开发反馈预生产部分部分flink任务出现中文乱码的问题 找到乱码的flink任务所在的节点,登录服务器,执行locale命令: 发现是locale没有设置好,使用vim编辑文本,写入中文都直接乱码 对比其他几台机器,发现主…

MySQL优化第二篇

MySQL优化第二篇 性能分析小表驱动大表慢查询日志日志分析工具mysqldumpslow Show Profile进行SQL分析(重中之重) 七种JOIN 1、inner join :可以简写为join,表示的是交集,也就是两张表的共同数据 sql语句&#xff1a…

文心一言插件开发全流程,ERNIE-Bot-SDK可以调用文心一言的能力

文心一言插件开发 前言插件插件是什么工作原理申请开发权限 开始第一步:安装python第二步:搭建项目manifest 描述文件:ai-plugin.json插件服务描述文件:openapi.yaml开发自己的plugin-server 第三步:上传插件 SDK相关链…

Vue3高频面试题+八股文

Vue3.0中的Composition Api 开始之前 Compos:1 tion API可以说是ue3的最大特点,那么为什么要推出Compos1t1on Api,解决了什么问趣? 通常使用Vue2开发的项目,普遍会存在以下问题: 代码的可读性随着组件变大而变差每一种代码复用的…

想要精通算法和SQL的成长之路 - 课程表II

想要精通算法和SQL的成长之路 - 课程表 前言一. 课程表II (拓扑排序)1.1 拓扑排序1.2 题解 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 课程表II (拓扑排序) 原题链接 1.1 拓扑排序 核心知识: 拓扑排序是专…

C++模版基础

代码地址 gitgithub.com:CHENLitterWhite/CPPWheel.git 专栏介绍 本专栏会持续更新关于STL中的一些概念,会先带大家补充一些基本的概念,再慢慢去阅读STL源码中的需要用到的一些思想,有了一些基础之后,再手写一些STL代码。 (如果你…

mysql远程连接失败

先上结论,只提出最容易忽略的地方 服务器是阿里云、腾讯云等平台,平台本身自带的防火墙没有开启iptables规则中禁用了3306,即使你根本没有启用iptables服务 第二条是最离谱的 从这里可以看到,我服务器并未启用 iptables 服务 但…