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

JavaSE:异常机制

异常概念

  1. 异常发生的原因

  1. 用户输入非法数据

  1. 要打开的文件不存在

  1. 网络中断/JVM内存溢出(JVM是JRE的一部分。它是一个虚构出来的计算机)

  1. 除0、非法参数等

  1. 三种类型的异常,用以理解异常

  1. 检查性异常【otherException】:程序员无法预见的,如文件不存在等,编译时报错

  1. 运行时异常【RuntimeException】:程序员可以避免,编译可忽略

  1. 错误【Error】:程序员脱离控制,如栈溢出

  1. JAVA的处理

  1. Java有异常处理框架,所有异常用一个异常类表示,不同类型的异常对应不同子类

  1. JDK1.4后,异常链机制,可跟踪异常

异常体系结构

异常之间的区别和联系

  1. Error

与编码者所执行的操作无关,也不应该试图去处理。如虚拟机运行错误Virtual MachineError,内存不够OutOfMemoryError,类定义错误NoClassDefFoundErro,链接错误LinkageError等。

===> 灾难性,Java一般会终止线程

  1. Exception

  • 运行时异常:数组下标越界ArrayIndexOutOfBoundsException、空指针NullPoint/丢失资源MissingResource等,由程序逻辑错误引起,属不检查异常,可不处理。

  • 非运行时异常:必须处理,IOException, SQLException,用户自定义的Exception等。属于检查异常。

===>可以处理,应尽可能去处理

  1. 检查异常和不受检查异常【都是Exception】

  • 不检查异常:运行时异常里的

  • 检查异常:除了运行时异常,都是检查异常,是必须处理的。处理方法:try-catch或者throws

Java异常处理机制

  1. 抛出异常

异常情形:当前方法或作用域无法继续执行了

抛出异常:异常情形下,从当前环境跳出,把问题交给上一级环境。

抛出异常后,在堆上new一个异常对象,当前执行路径被终止且弹出对异常对象的引用。异常处理机制接管程序,从异常处理程序开始执行程序。异常处理机制将程序回复/换种方式/继续运行下去。

  1. 捕获异常

方法抛出异常后,系统寻找合适的异常处理器。

潜在的异常处理器,是异常发生时,存留在调用栈的方法的集合。

若未找到,Java程序结束。

  1. 异常处理五个关键字

  1. try 监听: try语句块发生异常,则异常抛出

  1. catch 捕获

  1. finally 回收try打开的物力资源(数据库连接、网络连接、磁盘文件)如果finally里使用了return/throw等,则不会再执行try/catch中的return/throw

  1. throw 抛出异常

  1. throws 声明该方法会抛出异常

处理异常

  1. try-catch

  • 例子

写了try-catch,程序可以正常运行了,不然编译不通过

    public static void main(String[] args) {int a =1;int b = 0;try {if(b == 0) throw new ArithmeticException(); // 抛出算术异常System.out.println("a / b = " + a/b);}catch (ArithmeticException e){System.out.println("捕获到了异常!" + e);}System.out.println("程序结束");}

这个算术异常是运行时异常,系统会自动抛出的。比如不写这个try-catch,就会:

  • 多重catch

将捕获底层异常类的catch子句放在前面,较高层的放在后面

  • 嵌套try

没进入一个try,异常的前后关系会被推入堆栈。如果内部不含异常,堆栈弹出,检查下一个try。

  1. throw

异常由两个构造方法,一个有参数的,一个没有参数的。可以把参数传进去,通过e.getMessage()来获取这个异常参数。

    public static void main(String[] args) {try {proc();}catch (NullPointerException e){System.out.println("main中的catch" + e);}}static void proc(){try{// throw 明确异常throw new NullPointerException("demo");}catch(NullPointerException e){// 如果用 e.getMessage() , 则可以返回“demo”这个词System.out.println("proc中的catch" + e);throw e;    // 把异常抛出方法外}}
  1. throws

在方法声明中包含throws子句,就可以不用在方法中处理了。但调用该方法的main()需要写try-catch来处理。

    public static void main(String[] args) {try {proc();} catch (IllegalAccessException e) {// 如果这样throw出去,console中会由红字异常报出//throw new RuntimeException(e);    System.out.println("main中捕获咯");}}static void proc() throws IllegalAccessException{System.out.println("Proc()中的代码");throw new IllegalAccessException("demo");   // 是new这个异常哦}

注意点:

  • Error和RuntimeException, 可以不抛出,编译通过,运行是会被系统抛出

  • 如果是可查异常,必须在方法里写throws,然后用try-catch捕获/throws抛出

  • 抛出异常,方法调用者必须处理,或继续抛出

  • 调用方法必须遵循可查异常的处理和声明规则。覆盖一个方法时,不能声明与覆盖方法不同的异常。

  1. finally

在try/catch完成后,另一个try/catch之前执行。无论有无异常都会执行。可用来释放占用的资源,一定要释放哦!

    static void proc(){System.out.println("Proc()中的代码");int a = 2;try{if(a == 3){throw new IllegalAccessException("demo");   // 是new这个异常哦}}catch(IllegalAccessException e) {System.out.println(e.getMessage());}finally {System.out.println("finally!!! 我执行了!");}}
  • 执行顺序

  1. try, catch, 给返回值赋值

  1. finally

  1. return

自定义异常

  • 继承Exception类即可,创建自定义异常

  • 方法中抛出: try-catch捕获处理或者在方法声明里throws、调用者中捕获并处理

相关文章:

JavaSE:异常机制

异常概念异常发生的原因用户输入非法数据要打开的文件不存在网络中断/JVM内存溢出(JVM是JRE的一部分。它是一个虚构出来的计算机)除0、非法参数等三种类型的异常,用以理解异常检查性异常【otherException】:程序员无法预见的&…...

Go mockito 使用说明 (github/mockey)

GitHub - bytedance/mockey: a simple and easy-to-use golang mock library Go mockito 是什么? mockey是一个简单易用的golang mock库,可以快速方便的mock函数和变量。目前广泛应用于字节跳动服务的单元测试编写。底层是monkey patch,通过在运行时重…...

Spring Boot+Vue前后端分离项目练习01之网盘项目的搭建

1.前期设计 一般看来,网盘系统主要实体包括:用户、存储信息、用户文件、文件、回收文件等基本功能点。 各实体对应的表结构如下所示: 表名:user(用户表) 字段名属性说明userIdbigint主键usernamevarcha…...

超详细MySQL(免安装版)安装与配置

一、MySQL下载 首先打开MySQL官网,官网首页地址为 MySQL官网首页地址 进入官网后如下图所示,点击DOWNLOADS进入下载页面 下滑页面找到MySQL Community(GPL)Downloads>>并点击 接下来点击MySQL Community Server 若想要安…...

STM32F1,F4,L1系列禁止JTAG和SW引脚方法

STM32F1系列 程序中在使用到JTAG、SWD的某个IO 时,需要禁用掉相关调试方法后,再配置相应的IO方式。在需要相应的接口配置前使用这些代码。 对于F1系列,调用函数进行专门的禁止。 标准库配置方式: RCC_APB2PeriphClockCmd(RCC_A…...

NVIDIA CUDA初级教程视频学习笔记1

周斌老师 课程链接: 目录第一课内容生态环境第一课 CPU体系架构的概述什么是CPU指令存储器架构CPU内部的并行性第一课 预修课程: Cuda c programming guide 参考内容 1,2,3查找一下。 内容 CPU体系架构概述 并行程序设计概述 CUDA开发环境…...

CEC2005:星雀优化算法(Nutcracker optimizer algorithm,NOA)求解CEC2005(提供MATLAB代码)

一、星雀优化算法NOA 星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出,该算法模拟星雀的两种行为,即:在夏秋季节收集并储存食物,在春冬季节搜索食物的存储位置。 星鸦单独或成对活动&…...

工作实战之密码防重放攻击

目录 前言 一、登录认证密码加密 二、bcrypt加密密码不一样,匹配原理 1.程序运行现象 2.原理解释 三、密码防重放 总结 前言 密码重放攻击:请求被攻击者获取,并重新发送给认证服务器,从而达到认证通过的目的 一、登录认证密…...

如何编写测试用例?

编写测试用例流程 1、确定测试目标:首先,需要明确测试目标,即测试人员需要测试什么,这有助于测试人员了解需要测试哪些方面,以及如何测试。 2、识别测试场景:在确定测试目标后,测试人员需要识…...

5.排序算法之二:选择排序

选择排序(select sort)在无序列表中,把无序列表分成有序区(刚开始有序区元素个数为0)和无序区(刚开始无序区元素个数为n),循环n-1趟,每一趟找到最小或最大的那个元素&…...

Ubuntu18系统安装:node及node版本管理工具nvm部署前端项目

注意在安装之前先安装好Git 如何在Ubuntu 上安装Git与入门教程_ubuntu安装git_飞鹰雪菲的博客-CSDN博客 1、把nvm远程镜像克隆到指定目录 git clone https://gitee.com/mirrors/nvm 1.1在终端指定的文件夹下 drciZwz91oq31508figapkas0Z:~/qiang/tools$ git clone https://…...

统计学 假设检验

文章目录假设检验假设检验的基本原理提出假设作出决策表述决策结果一个总体参数的检验总体均值的检验总体比例的检验总体方差的检验两个总体参数的检验两个总体均值之差的检验两个总体比例之差的检验两个总体方差比的检验总体分布的检验正态性检验的图示法Shapiro-Wilk 和 K-S …...

【C++】哈希

哈希一、unordered系列关联式容器二、哈希原理2.1 哈希映射2.2 哈希冲突2.2.1 闭散列—开放地址法2.2.2 代码实现2.2.3 开散列—拉链法2.2.4 代码实现三、哈希封装unordered_map/unordered_set3.1 基本框架3.2 迭代器实现3.2.3 operator*和operator->和operator!3.2.4 opera…...

「TCG 规范解读」PC 平台相关规范(3)

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...

这篇教你搞定Android内存优化分析总结

一、内存优化概念1.1 为什么要做内存优化?内存优化一直是一个很重要但却缺乏关注的点,内存作为程序运行最重要的资源之一,需要运行过程中做到合理的资源分配与回收,不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&…...

概率论与数理统计期末小题狂练 11-12两套,12-13-1

11-12第一学期A1 略。2 X服从正态分布N(0,1),X^2服从卡方分布。又考查了卡方分布均值和方差公式。一开始如果对本题无从下手,大概是没看出来是什么分布。3 第二小空本身也可以作为一个结论。4 考查切比雪夫不等式&…...

golang对字符串的处理操作 如何正确理解 rune byte和string

fmt.Printf相关参数介绍 先来看代码的演示 package mainimport ("fmt""unicode/utf8" )func main() {s:"我爱中国人haha!"fmt.Println(len(s))//20个字节 一个中文三个字节 1541fmt.Print("\n echo byte \n")for k,v: range []byte(…...

软件项目管理简答题复习(1)

1.项目:创造唯一的产品,唯一的服务临时性的努力 2.项目特征:不可见性,复杂性,一致性,变更性,特殊性 3.项目和日常活动的区别? 项目具有特殊性,负责人是项目经理&#…...

云Windows Server 2022 Datacenter 安装MySQL8解压缩版 mysql-8.0.32-winx64 230301记录

MySQL Community Downloads MySQL社区版压缩包下载地址 https://dev.mysql.com/downloads/mysql/ 解压到了C盘 没打算设置环境变量 右键点击开始 或 winx 以管理员身份打开 PowerShell 进入到安装目录下的 bin 目录 可以输入cd 后, 拖动 bin 文件夹到控制台&…...

如何使用BeaconEye监控CobaltStrike的Beacon

关于BeaconEye BeaconEye是一款针对CobaltStrike的安全工具,该工具可以扫描正在运行的主动CobaltStrike Beacon。当BeaconEye扫描到了正在运行Beacon的进程之后,BeaconEye将会监控每一个进程以查看C2活动。 工作机制 BeaconEye将会扫描活动进程或Mini…...

STM32开发(17)----CubeMX配置CRC

CubeMX配置CRC前言一、什么是CRC?二、实验过程1.STM32CubeMX配置2.代码实现重载printf3.实验结果总结前言 本章介绍使用STM32CubeMX对CRC进行配置的方法,CRC的目的是保证数据的完整性,所有的STM32芯片都内置了一个硬件的CRC计算模块&#xf…...

【MySQL】基础操作:登录、访问、退出和卸载

一、MySQL简介 MySQL数据库最初是由瑞典MySQL AB公司开发,2008年1月16号被Sun公司收购。2009年,SUN又被Oracle收购。MySQL是目前IT行业最流行的开放源代码的数据库管理系统,同时它也是一个支持多线程、高并发、多用户的关系型数据库管理系统。…...

【算法经典题集】递推(持续更新~~~)

😽PREFACE🎁欢迎各位→点赞👍 收藏⭐ 评论📝📢系列专栏:算法经典题集🔊本专栏涉及到的知识点或者题目是算法专栏的补充与应用💪种一棵树最好是十年前其次是现在递推简单的斐波那契…...

mysql兼容性验证

MySQL是一个关系型数据库管理系统。 一、安装启动 安装mysql相关软件包 yum install mysql-server 启动mysql服务 systemctl start mysqld systemctl status mysqld mysql数据库启动失败问题汇总&#xff1a; <问题1>、start mysqld显示失败&#xff0c;如下所示&…...

C++回顾(五)—— 构造函数和析构函数

5.1 构造和析构 5.1.1 构造函数 &#xff08;1&#xff09;定义 1&#xff09;C中的类可以定义与类名相同的特殊成员函数&#xff0c;这种与类名相同的成员函数叫做构造函数&#xff1b;2&#xff09;构造函数在定义时可以有参数&#xff1b;3&#xff09;没有任何返回类型的…...

嵌入式学习笔记——概述

嵌入式系统概述前言“嵌入式系统”概念1.是个啥&#xff1f;2.可以干啥&#xff1f;3.有哪些入坑方向&#xff1f;4.入坑后可以有多少薪资&#xff1f;单片机1.什么是单片机&#xff1f;2.架构简介3.基于ARM架构的单片机结构简介总结前言 断更很长时间了&#xff0c;写博客确实…...

化繁为简高效部署 华为云发布部署服务CodeArts Deploy

​随着互联网、数字化的发展&#xff0c;公司机构与各类企业往往需要进行大量频繁的软件部署&#xff0c;部署设备类型多样&#xff0c;如&#xff1a;本地机器、云上裸金属服务器、云上虚拟机与容器等。面对多种部署模式、分布式复杂运行环境&#xff0c;如何用最短时间、高质…...

注意力机制详解系列(四):混合注意力机制

👨‍💻作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 🎉专栏推荐: 目前在写CV方向专栏,更新不限于目标检测、OCR、图像分类、图像分割等方向,目前活动仅19.9,虽然付费但会长期更新,感兴趣的小伙伴可以…...

Makefiles学习1

初识"Makefiles" 创建一个 “Makefile” 文件 touch Makefile“touch” 用于修改文件或者目录的时间属性&#xff0c;包括访问时间和修改时间&#xff0c;若文件不存在&#xff0c;则重新建立一个新的文件。这里有两个需要我们注意的&#xff1a; 进入并编辑"…...

日志框架以及如何使用LogBack记录程序

使用日志框架可以记录一个程序运行的过程和详情&#xff0c;同时便捷地存储到文件里面&#xff0c;并且性能和灵活性都比较好。日志的体系结构包括两类日志规范接口&#xff1a;Commons Logging&#xff0c;简称&#xff1a;JCL&#xff1b;Simple Logging Facade for Java&…...

企业科技网站建设/公司网站设计模板

在充分了解节点计算机硬件资源的情况下进行Storm运行性能的调优。 Storm运行性能调优主要是从以下几个方面&#xff1a; (1)代码层面&#xff0c;这得看程序编写者的功力了。 (2)并行度层面&#xff0c;分为&#xff1a; setNumWorkers取值&#xff1b; kafkaSpout取值&am…...

江阴网站建设哪家好/网络营销品牌有哪些

开头 在一般的互联网公司的技术人员的面试中&#xff0c;大概会经历3到4轮的面试&#xff0c;差不多2-3轮的技术面&#xff0c;还有1轮的HR面试&#xff0c;有人面试题是有关“目标”&#xff0c;有的关于“方法”&#xff0c;有的关于“算法”&#xff0c;有的关于“基础”。…...

做网站要注意哪一点/域名权重查询工具

卫星通信自20世纪60年代出现以来&#xff0c;在全球通信领域扮演着重要的角色。而随着因特网旋风的出现&#xff0c;卫星通信与因特网相结合的卫星因特网技术成为卫星通信发展中的新热点。 卫星因特网技术近期得到了快速发展&#xff0c;卫星已成为因特网连接的一个重要组成部…...

小区网站建设/网店代运营哪个好

概述&#xff1a;实力是一种客观存在&#xff0c;而霸权不同&#xff0c;霸权的基础虽然是实力&#xff0c;但它更是一种感知&#xff0c;是其他国家对他实力的感知。 一个大国&#xff0c;当然要积累实力&#xff0c;但重要的是通过战略运作&#xff0c;来经营国际社会对你霸权…...

去空格网站/百度竞价点击价格

题意&#xff1a;给定一棵树图&#xff0c;n个节点&#xff0c;有边权&#xff0c;要派k<11个机器人从节点s出发&#xff0c;遍历所有的点&#xff0c;每当1只机器人经过1条边时就会花费该边的边权&#xff0c;边是可重复走的。问遍历完所有点的最小花费&#xff1f; 思路&a…...

有经验的合肥网站建设/软件公司

XSS的原理分析与解剖 001 前言: 《xss攻击手法》一开始在互联网上资料并不多(都是现成的代码&#xff0c;没有从基础的开始)&#xff0c;直到刺的《白帽子讲WEB安全》和cn4rry的《XSS跨站脚本攻击剖析与防御》才开始好转。 我这里就不说什么xss的历史什么东西了&#xff0c;xss…...