JAVA SE -- 第十一天

news/2024/4/16 23:08:31/文章来源:https://blog.csdn.net/qq_46324053/article/details/131884476

(全部来自“韩顺平教育”)

异常-Exception

一、异常介绍

1、基本介绍

Java语言中,将程序执行中发生的不正常情况为“异常”(开发过程中的语法错误和逻辑错误不是异常)

2、执行过程中发生的异常事件可分为两大类

①Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError[栈溢出]和OOM(out of memory),Error事严重错误,程序会崩溃

②Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception分为两大类:运行时异常[程序运行时,发生的异常]和编译时异常[编程时,编译器检查出的异常]

3、异常体系图

 小结:

①异常分为两大类,运行时异常和编译时异常

②运行时异常,编译器检查不出来。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RunntimeException类及它的子类都是运行时异常

③对于运行时异常,可以不作处理,因为这类异常很普通,若全处理可能会对程序的可读性和运行效率产生影响

④编译时异常,是编译器要求必须处置的异常

二、常见的运行时异常包括

1)NullPointException空指针异常:

当应用程序试图在需要对象的地方使用null时,抛出异常

    

2)ArithmeticException数学运算异常

当出现异常的运算条件,抛出此异常

3)ArrayIndexOutOfBoundsException   数组下标越界异常

用非法索引访问 数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引

4)ClassCastException类型转换异常

当试图将对象强制转换为不是实例的子类时,抛出异常。

 

5)NumberFormatException数字格式不正确异常

当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出异常

 

三、编译异常

指在编译期间,就必须处理的异常,否则代码不能通过编译

1、常见的编译异常

1)SQLException:操作数据库时,查询表可能发生异常

2)IOException:操作文件时,发生的异常

3)FileNotFoundException:当操作一个不存在的文件时,发生异常

4)ClassNotFoundException:加载类,而该类不存在时,异常

5)EOFException:操作文件,到文件末尾,发生异常

6)IIIegalArguementException:参数异常

四、异常处理

当异常发生时,对异常处理的方式

1、异常处理的方式

①try-catch-finally

程序员在代码中捕获发生的异常,自行处理

②throws

将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM

2、示意图

 3、try-catch异常处理

①Java提供try和catch块来处理异常。try块用于包含可能出错的代码。catch块用于处理try块中发生的异常。可以根据需要在程序中有多个try...catch块

②基本语法

try{

        //可疑代码

        //将异常生成对应的异常对象,传递给catch块

}catch(异常){

        //对异常的处理
}

//如果没有finally,语法是可以通过

 ③注意事项

①如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块

②如果异常没有发生,则顺序执行try的代码块,不会进入到catch

③如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)

        则使用如下代码 -finally{}

        

        try{

                //可疑代码

        }catch(异常){

                //...
        }finally{

               //释放资源等...

        }

④可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch

⑤可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩溃/退出。应用场景,就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑

④小结

1)如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句

2)如果出现异常,则try块中异常发生后,try块剩下的语句不再执行。将执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句

 4、throws异常处理

①基本介绍

1)如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常继续宁处理,而由该方法的调用者负责处理

2)在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类

②注意事项

1)对于编译异常,程序中必须处理,比如try-catch或者throws

2)对于运行时异常,程序中如果没有处理,默认就是throws的方式处理

3)子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型

4)在throws过程中,如果有try-catch,就相当于处理异常,就可以不必throws

 

五、自定义异常

1、基本概念

当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息

2、自定义异常的步骤

①定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException

②如果继承exception,属于编译异常

③如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException)

 

六、throw和throws

意义位置后面跟的东西
throws异常处理的一种方式方法声明处异常类型
throw手动生成异常对象的关键字方法体中异常对象

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

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

相关文章

Reinforcement Learning with Code 【Chapter 9. Policy Gradient Methods】

Reinforcement Learning with Code This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of Reinforcement Learning, . 文章…

opencv+ffmpeg环境(ubuntu)搭建全面详解

一.先讲讲opencv和ffmpeg之间的关系 1.1它们之间的联系 我们知道opencv主要是用来做图像处理的,但也包含视频解码的功能,而在视频解码部分的功能opencv是使用了ffmpeg。所以它们都是可以处理图像和视频的编解码,我个人感觉两个的侧重点不一…

SpringBoot项目部署(前后端分离、Linux部署项目)

一、架构 部署环境说明: 192.168.122.100(服务器A): Nginx:部署前端项目、配置反向代理 Mysql:主从复制结构中的主库 192.168.122.131 (服务器B): jdk: 运行Java项目 git:版本控制工具 (从gitee中拉取源码) maven:…

数据结构:快速的Redis有哪些慢操作?

redis 为什么要这莫快?一个就是他是基于内存的,另外一个就是他是他的数据结构 说到这儿,你肯定会说:“这个我知道,不就是 String(字符串)、List(列表)、 Hash&#xff08…

【SpringCloud Alibaba】(五)服务雪崩与容错方案

在前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。 但是,现在系统中存在着一个很明显的问题:那就是如果系统的并发量上来后,系统并没有容错的能力&#xf…

Java | 继承、多态、抽象类与接口

目录 一、类的继承 二、Object类 2.1 getClass()方法 2.2 toString()方法 2.3 equals()方法 三 、对象类型的转换 3.1 向上转换 3.2 向下转型 四、使用instanceof关键字判断对象类型 五、方法的重载 六、final关键字 6.1 final变量 6.2 final方法 6.3 final类 七…

LeetCode 1857. Largest Color Value in a Directed Graph【拓扑排序,动态规划】困难

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

【UE5】快速认识入门

目录 🌟1. 快速安装🌟2. 简单快捷键操作🌟3. 切换默认的打开场景🌟4. 虚幻引擎术语 🌟1. 快速安装 进入Unreal Engine 5官网进行下载即可:UE5 📝官方帮助文档 打开后在启动器里创建5.2.1引擎…

冯诺依曼体系的认识、来源、原理、组成、功能和特点

目录 一.认识冯诺依曼 二.冯诺依曼体系结构的来源 三.冯诺依曼体系结构计算机 3.1工作原理 3.2组成部件 3.3功能和特点 🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 🎥 本文由 tq02 原创,首发于 CSDN&…

C++笔记之vector的resize()和clear()用法

C笔记之vector的resize()和clear()用法 code review! 文章目录 C笔记之vector的resize()和clear()用法1.resize()2.clear() 1.resize() 运行 2.clear() 运行

Jsp+Ssh+Mysql实现的简单的企业物资信息管理系统项目源码附带视频指导运行教程

由jspssh(springstruts2mysql)实现的企业物资信息管理系统,系统功能比较简单,实现了基本的管理员、操作员等用户管理、物品分类管理、物品管理、入库管理、出库管理、库存预警、客户管理、供应商管理等基本功能需要的可以联系我分…

怎么在线制作证件?教你一键生成证件照

无论是申请身份证、护照、驾照还是学生证,都需要一张清晰、规范的证件照。但是,为了拍摄一张完美的证件照,需要付出不少时间和精力。而现在,我们可以使用压缩图网站提供的证件照制作工具,轻松制作出一张清晰、规范的证…

《重构的时机和方法》——让你的代码更健壮、更易维护

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

FFmpeg aresample_swr_opts的解析

ffmpeg option的解析 aresample_swr_opts是AVFilterGraph中的option。 static const AVOption filtergraph_options[] {{ "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS,{ .i64 AVFILTER_THREAD_SLICE }, 0, INT_MA…

【学会动态规划】打家劫舍 II(12)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

P3818 小A和uim之大逃离 II

题目 思路 一眼bfs 好像需要记录的东西有点多啊&#xff0c;那就交给数组吧 s t i j 0 / 1 st_{ij0/1} stij0/1​表示用/没用特殊步走到(i,j)的步数&#xff0c;然后套bfs模板即可 代码 #include<bits/stdc.h> using namespace std; const int N1005; int n,m,d,r,st…

使用Kmeans算法完成聚类任务

聚类任务 聚类任务是一种无监督学习任务&#xff0c;其目的是将一组数据点划分成若干个类别或簇&#xff0c;使得同一个簇内的数据点之间的相似度尽可能高&#xff0c;而不同簇之间的相似度尽可能低。聚类算法可以帮助我们发现数据中的内在结构和模式&#xff0c;发现异常点和离…

Pycharm debug程序,跳转至指定循环条件/循环次数

在断点出右键&#xff0c;然后设置条件 示例 for i in range(1,100):a i 1b i 2print(a, b, i) 注意&#xff1a; 1、你应该debug断点在循环后的位置而不是循环上的位置&#xff0c;然后你就可以设置你的条件进入到指定的循环上了 2、设置条件&#xff0c;要使用等于符号…

系统集成|第七章(笔记)

目录 第七章 范围管理7.1 项目范围管理概念7.2 主要过程7.2.1 规划范围管理7.2.2 收集需求7.2.3 定义范围7.2.4 创建工作分解结构 - WBS7.2.5 范围确认7.2.6 范围控制 上篇&#xff1a;第六章、整体管理 第七章 范围管理 7.1 项目范围管理概念 概述&#xff1a;项目范围管理就…

【深度学习Week3】ResNet+ResNeXt

ResNetResNeXt 一、ResNetⅠ.视频学习Ⅱ.论文阅读 二、ResNeXtⅠ.视频学习Ⅱ.论文阅读 三、猫狗大战Lenet网络Resnet网络 四、思考题 一、ResNet Ⅰ.视频学习 ResNet在2015年由微软实验室提出&#xff0c;该网络的亮点&#xff1a; 1.超深的网络结构&#xff08;突破1000层&…