当前位置: 首页 > news >正文

Java笔记-异常相关

一、异常概述与异常体系结构

Error:Java虚拟机无法解决的严重问题:
JVM系统内部错误,资源耗尽,如:StackOverflow \OOM堆栈溢出
处理办法:只能修改代码,不能编写处理异常的代码
Exception:可以处理的异常
(1)空指针访问
(2)试图读取不存在的文件
(3)网络连接中断
(4)数组角标越界
处理异常的最佳时间:编译期间
编译时异常----受检异常-----更严重,执行javac.exe命令时可能出现的异常
运行时异常—非受检异常—执行java.exe命令时,出现的异常—一般也不用try-catch处理(实际开发中)
** 异常的体系结构: **

常见的异常类型,举例说明:

/* **************运行时异常************ */
@Test
//ArithmeticException
public void test1(){int a=2;int b=0;System.out.println(a/b);
}@Test
//InputMismatchException
public void test2(){Scanner scanner=new Scanner(System.in);int score=scanner.nextInt();System.out.println(score);scanner.close();
}@Test
//NullPointerException
public void test3(){int[] num=null;System.out.println(num[3]);String str=null;System.out.println(str.length());
}@Test
//ArrayIndexOutOfBoundsException
//StringIndexOutOfBoundException
public void test4(){int[] num = new int[2];System.out.println(num[3]);String str="abc";System.out.println(str.charAt(5));
}@Test
//ClassCastException
public void test5(){Object obj=new Date();System.out.println(obj);String str=(String)obj;
}@Test
//NumberFormatException
public void test6(){String str="abc";System.out.println(Integer.valueOf(str));
}

二、异常处理机制

1.抓抛模型

抛——程序在正常执行的过程中, 一旦出现异常,会产生并抛出一个异常类的对象,之后代码不执行
关于异常类对象的产生:(1)系统自动生成的异常对象
(2)手动生成一个异常对象并抛出throw new 异常名();

抓——处理异常的方式
(1)try-catch-finally
(2)throws 往外抛,最多抛到main就要处理

2.异常处理方式一:try-catch-finally

try{// 可能产生异常的代码
}catch(异常类型1 变量名1){//处理异常的方式1
}catch(异常类型2 变量名2){//处理异常的方式2
}finally{//一定会执行的代码
}

说明:
(1)finally是可以省略的
(2)使用try将可能产生异常的代码包装起来,一旦出现异常,就会生成一个对应的异常类对象
根据此对象的类型,去catch中进行匹配
(3)一旦try中的异常对象匹配到某一个catch,就会进入catch中进行异常的处理,一旦处理完成,
就跳出当前的try-catch结构(在没有写finally时),继续执行其后的代码
(4)catch中的异常类型如果没有子父类关系,则谁声明在上,在下无所谓
catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面,否则会报错
(5)常用的异常对象处理方式:
①String getMessage()
②e.printStackTrace()
(6)在try结构中声明的变量,出了try结构以后,就不能再被调用
** finally的认识 **
(1)finally中声明的语句是一定会被执行的代码,即使catch中又出现了异常,try中有return,catch种有return语句等
(2)finally中的语句会在所有return语句执行前被执行
finally中如果有return,直接执行finally中的return
(3)finally的使用场景:
像数据库连接、输入输出流、网络编程Socket等资源,
JVM是不能自动回收的,需要手动进行资源释放,就需要声明在finally中
** 体会:**
(1)使用try-catch-finally处理编译时异常,使得程序在编译时不再报错,但运行时仍可能报错
相当于shiyongtry-catch-finally将一个编译时可能出现的异常,延迟到运行时出现
(2)开发中,由于运行时异常比较常见,所以通常不针对运行时异常编写try-catch-finally
编译时异常,一定要考虑异常处理

3.异常处理方式二:throws+异常类型

  写在方法的声明处,指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,仍会在

异常代码处生成一个异常类的对象,此对象满足throws后的异常类型时,就会被抛出。异常代码后续的代码不会再执行。

4.对比两种处理方式

**try-cathch-finally:**真正将异常处理掉了
throws+异常类型:只是将异常抛给了方法的调用者,并没有真正将异常处理掉
体会
(1)父类没有抛出异常,子类也不能抛异常
(2)子类抛出的异常不大于父类抛出的异常

5.开发中如何选择使用try-catch-finally还是throws

(1)如果父类中被重写的方法没有throws处理异常,则子类重写方法也不能用throws
只能用try-catch-finally
(2)执行的方法中,先后调用了另外几个方法,这几个被调用的方法是递进关系执行的,
建议使用throws处理这几个方法,执行方法使用try-catch-finally

三、手动抛出异常对象 throw

1.运行时异常可以不在方法声明里throws
2.编译时异常需要在方法声明中抛出

四、用户自定义异常

1.继承现有的异常体系结构RuntimeException,Exception
2.提供序列版本号
3.提供重载的构造器

五、throw和throws的区别

throw:抛出一个异常类的对象,生成异常对象的过程声明在方法体内
throws:属于异常处理的一种方式,在方法声明处声明

相关文章:

Java笔记-异常相关

一、异常概述与异常体系结构 Error:Java虚拟机无法解决的严重问题: JVM系统内部错误,资源耗尽,如:StackOverflow \OOM堆栈溢出 处理办法:只能修改代码,不能编写处理异常的代码 Exception:可以处理的异常 &…...

pytest-xdist测试用例并发

官方文档:pytest-xdist初次使用参考:Python测试框架pytest(22)插件 - pytest-xdist(分布式执行)pytest测试框架系列 - Pytest pytest-xdist 分布式、多进程并发执行用例你会用吗?Pytest-xdist并…...

大数据---Hadoop安装jdk简易版

编写自动安装jdk的shell脚本 完整流程: 大数据—Hadoop安装教程(一) 文章目录编写自动安装jdk的shell脚本上传压缩包编写shell脚本vim autoinstall.sh解压更名添加环境运行上传压缩包 在opt目录下创建连个目录install和soft 将压缩包上传到install目录…...

【0基础学爬虫】爬虫基础之爬虫的基本介绍

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…...

Python 数据库开发实战 - Python与Redis交互篇- 综合案例 - 新闻管理系统 - 缓存新闻数据至redis

接下来这个章节将继续来完成 《新闻管理系统》 这个项目,上一章节我们完成了 “发表新闻” 这个功能,在发表新闻后,什么时候才会缓存该条新闻记录呢?并不是说在发表新闻成功之后就立刻被缓存,而是该新闻被管理员审批通…...

Vue拼图验证

vue-puzzle-verification 封装的一个用于登录验证的拼图的vue组件,使用了canvas画图和拖拽的一些技巧。支持大小、形状、图片、偏差、范围的自定义。 一、安装使用 npm install vue-puzzle-verification 二、main.js里引入 import PuzzleVerification from vue…...

这个神器,让 Python 爬虫如此简单

相信大家应该都写过爬虫,简单的爬虫只需要使用 requests 即可。遇到复杂的爬虫,就需要在程序里面加上请求头和参数信息。类似这种: 我们一般的步骤是,先到浏览器的网络请求中找到我们需要的请求,然后将请求头和参数信…...

网络舆情公关必须把握的四项基本原则

在这个网络媒体占主导的时代,舆情公关进入了网络自媒体时代,有时候可能企业认为是小事儿,也可能在网上掀起轩然大波,所以网络舆情优化成为营销推广工作中重要一环。网络舆情优化的目标是让网络舆论对企业经营发展有利的方向发展&a…...

Kafka技术认知

文章目录概念理解名词解释基本架构工作流程Kafka的特性概念理解 Kafka是分布式的基于发布-订阅消息队列。是一个分布式、支持分区的、多副本的,基于 Zookeeper 协调的分布式消息中间件系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景…...

2022年新一代kaldi团队技术输出盘点

目录 1. 技术创新 1.1 Pruned RNN-T loss 1.2 RNN-T 的快速 GPU 解码 1.3 多码本量化索引的知识蒸馏 1.4 RNN-T 和 CTC 的低延时训练 1.5 Zipformer 1.6 Small tricks 2. 模型部署 2.1 Sherpa 2.1 Sherpa-ncnn 3. 更多的 recipe 和模型 参考资料 1. 技术创新 1.1 …...

数据结构复习(三)顺序表oj

目录 27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组 27. 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外…...

2023.2.10每日一题

每日一题题目描述解题核心解法一:模拟题目描述 题目链接:2553. 分割数组中数字的数位 给你一个正整数数组nums,请你返回一个数组answer,你需要将nums中每个整数进行数位分割后,按照nums中出现的相同顺序放入答案数组…...

Homekit智能家居DIY一智能吸顶灯

买灯要看什么因素 好灯具的灯光可以说是家居的“魔术师”,除了实用的照明功能外,对细节的把控也非常到位。那么该如何选到一款各方面合适的灯呢? 照度 可以简单理解为清晰度,复杂点套公式来说照度光通量(亮度&#x…...

关于 OAuth 你又了解哪些?

作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者。 OAuth 的背景 OAuth,O 是 Open,Auth 是授权,也就是开放授权的意思。OAuth 始于 2006 年&a…...

18. 构造函数和析构函数,构造函数的分类和调用

构造函数和析构函数 构造函数 //没有返回值 不用写void//函数名 与 类名相同//可以有参数 ,可以发生重载//构造函数 由编译器自动调用一次 无须手动调用析构函数 //没有返回值 不用写void函数名 与类名相同 函数名前 加 ~不可以有参数 ,不可以发生重载析构函数 也是由编译器自…...

JavaScript设计模式es6(23种)

设计模式简介设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的…...

设计「业务」与「技术」方案

三天研发,两天设计; 01【优先做设计方案】 职场中的那些魔幻操作,研发最烦的是哪个? 作为一个数年且资深的互联网普通开发,可以来说明一下为什么是:缺乏设计; 面对业务需求的时候&#xff0c…...

C/C++:预处理(下)

目录 一.回顾程序的编译链接过程 二. 预处理之预定义#define 1.#define定义的标识符 2.#define定义的宏 3.带副作用的表达式作为宏实参 4.两个经典的宏 5.#define使用的一些注意事项小结 6.宏与函数的比较 7.#undef 附:关于#define的三个冷知识 三. 条件…...

2023互联网相关岗位转行与就业选择的简单分析

文章目录1、城市2、岗位1、城市 能找得到工作的城市,可能主要也就这些base了 2、岗位 主要技术岗位 Python 侧重人工智能,人工智能门槛高大家心知肚明。如果学python 不走人工智能,只走单纯的后端开发,不管从薪资还是岗位数量…...

LeetCode·每日一题·1223.掷骰子模拟·记忆化搜索

作者:小迅链接:https://leetcode.cn/problems/dice-roll-simulation/solutions/2103471/ji-yi-hua-sou-suo-zhu-shi-chao-ji-xiang-xlfcs/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权&#xff0…...

AI智能体长期记忆架构:构建Agent Shadow Brain解决上下文限制

1. 项目概述:当AI智能体拥有一个“影子大脑”最近在AI智能体开发领域,一个名为“Agent Shadow Brain”的项目引起了我的注意。这个项目由开发者theihtisham发起,其核心思想是为大型语言模型驱动的智能体配备一个独立的、持续运行的“影子大脑…...

RFSoC开发避坑指南:手把手教你理解并配置RF数据转换器的核心结构体(以XRFdc为例)

RFSoC开发实战:深度解析XRFdc结构体配置与避坑策略 第一次打开xrfdc.h头文件时,面对密密麻麻的结构体定义,我的鼠标滚轮不由自主地滑动了三分钟才看完所有内容。作为曾经在RFSoC项目上踩过无数坑的开发者,我完全理解那种面对数十个…...

别再折腾Java环境了!用Docker一键部署BurpSuite社区版,5分钟开箱即用

用Docker容器化技术5分钟部署BurpSuite社区版:告别Java环境配置噩梦 在网络安全领域,BurpSuite无疑是Web应用渗透测试的瑞士军刀。但传统安装方式需要配置Java环境、处理兼容性问题,甚至不少用户为了功能完整而冒险使用破解版。现在&#xf…...

Arm MPS3 FPGA开发板LED闪烁控制实战

1. 项目概述在嵌入式系统开发领域,FPGA(现场可编程门阵列)因其可重构特性成为硬件原型设计的首选平台。Arm MPS3 FPGA开发板作为一款功能强大的原型验证工具,为开发者提供了从算法验证到系统集成的完整解决方案。本次我们将通过经…...

NoFences:你的Windows桌面整理革命,告别杂乱无章的终极方案

NoFences:你的Windows桌面整理革命,告别杂乱无章的终极方案 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在几十个图标中寻找需要的应…...

数据清洗实战:解锁混乱数据,构建高效企业集成管道

1. 项目概述与核心价值 最近在和一些做企业级应用集成的朋友聊天,发现一个挺有意思的痛点:很多系统在对接时,数据格式五花八门,尤其是那些历史包袱重的老系统,传过来的数据经常是“拧巴”着的。比如,一个本…...

Python篇---常考的数据类型

一、常见数据类型及其特点Python 的数据类型可以分两大类:不可变类型和可变类型。这个区分是很多考点的基础。1. 不可变类型(值变了,对象就换了)整数 int特点:精度无限,只有整数不分长短。适合大数运算。考…...

AWorksLP嵌入式系统移植FatFs驱动SD卡:从原理到实践全解析

1. 项目概述:为什么要在AWorksLP上折腾FatFs和SD卡?如果你正在用AWorksLP这类面向物联网的轻量级实时操作系统(RTOS)平台做开发,大概率会遇到一个经典需求:如何可靠、高效地存储数据。无论是记录传感器日志…...

开源机械爪资源库指南:从入门到ROS集成与自主抓取

1. 项目概述:一个开源“机械爪”的宝藏资源库如果你对机器人、自动化或者DIY硬件感兴趣,最近又在琢磨着给自己的项目加一个“手”,那么你很可能已经听说过“机械爪”这个概念。无论是想做一个自动抓取小物件的桌面机器人,还是为你…...

MySQL实现跨库在线迁移的方法_利用Binlog实时数据同步工具

MySQL跨库迁移不能只靠mysqldump,因其逻辑全量导出会锁表或阻塞写入,且无位点信息无法增量追平;必须结合binlog实时拉取回放实现秒级停机。MySQL跨库迁移为什么不能只靠mysqldump因为mysqldump是逻辑全量导出,锁表或至少阻塞写入&…...