JAVA学习笔记27(异常)

1.异常

​ *异常(Exception)

​ *快捷键 ctrl + alt + t 选中try - catch

​ *如果进行了异常处理,那么即使出现了异常,程序可以继续执行

1.1 基本概念

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

​ *执行过程中所发生的异常事件可分为两大类

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

​ 2.Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理,例如空指针访问,试图读取不存在的文件,网络连接中断等等。

​ *Exception分为两大类:运行时异常[程序运行时发生的异常]和编译时异常[编程时,由编译器检查出的异常]

1.2 异常体系图

在这里插入图片描述

​ *运行时异常,编译器检查不出来,编译器不要求强制处置的异常,一般是指编程时的逻辑错误,是程序员应该避免出现的异常

​ *对于运行时异常,可以不做处理,因为很普遍,全处理可能会对程序的可读性和运行效率产生影响

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

1.3 常见的运行时异常

1.NullPointerException 空指针异常

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

2.ArithmeticException 数学运算异常

​ *一个整数除以零

3.ArrayIndexOutOfBoundsException 数组下标越界异常

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

4.ClassCastException 类型转换异常

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

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

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

1.4 常见的编译异常

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

2.IOException //操作文件时,发生的异常

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

4.ClassNotFoundException //加载类,而该类不存在时,异常

5.EOFException //操作文件,到文件末尾,发生异常

6.IllegalArgumentException //参数异常

1.5 异常处理

​ *异常处理就是当异常发生时,对异常处理的方式

1.异常处理的方式

​ *try-catch-fianlly和throws方法二选一

​ *如果没有使用try-catch-finally或者throws方法,没有处理异常,默认throws到JVM处理,直接输出异常信息

1.try-catch-finally

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

​ 1.try块用于包含可能出错的代码

​ 2.catch块用于处理try块汇总发火说呢过的异常

​ 3.finally可写可不写

​ 4.如果异常发生了try块后面的代码将不会再执行,直接进入catch块

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

main()
{try{Person person = new person();person = null;System.out.rpuntln(person.getName());	//NullPointerExceptionint n1 =10;int n2 = 0;int res = n1 / n2;//ArithmeticException} catch (NullPointerException e){System.out.println("空指针异常=" + e.getMessage());} catch (ArithmeticException e) {System.out.println("算术异常=" + e.getMessage());} catch (Exception e){System.out.println(e.getMessage());}finally{}
}

​ 6.也可以直接进行try-fianlly配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉

​ *应用场景,就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑

try{//代码
}finally{//总是执行
}
try{代码	//可能有异常
}catch(Exception e){//捕获到异常//1.当异常发生时//2.系统将异常封装成Exception 对象e,传递给catch//3.得到异常后,程序员自己处理//4.如果没有发生异常,catch代码块不执行
}finally{//不管try代码块是否有异常发生,始终要执行finally//所以,通常将释放资源的代码,放在finally内
}
2.throws

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

​ *throws处理机制图

​ *JVM

​ //处理异常机制

​ //1.输出异常信息

​ //2.退出程序

在这里插入图片描述

1.基本介绍

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

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

public class Throws01{public static void main(String[] args) {}//throws关键字后也可以是异常列表,即可以抛出多个异常public void f1() throws FileNotFoundException,ArrayIndexOutOfBoundsException {//创建了一个文件流对象//1.这里的异常是一个FileNotFoundException 编译异常//2.使用前面讲过的 try-catch-finally//3.使用throws,抛出异常,让调用f1方法的调用者(方法)处理FileInputStream fis = new FileInputStram("d://a.txt");}
}
2.注意事项和细节

​ 1.对于编译异常,程序中必须处理

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

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

class Father {public void method() throws RuntimeException {}
}class Son extends Father {//throws后面要和RuntimeException一致或者为其子类型@Overridepublic void method() throws RuntimeException {
}
}

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

1.6 自定义异常

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

1.自定义异常的步骤

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

​ 2.如果继承Exception,属于编译异常

​ 3.如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException),可以使用默认的处理机制

main() {int age = 80;//要求年龄在18 - 120之间,否则抛出一个自定义异常if(!(age >= 18 && age <= 120)) {throw new AgeException("年龄要在18-120之间")
}class AgeException extends RuntimeException {public AgeException(String message) {super(message);}
}

1.7 throw和throws的区别

在这里插入图片描述

​ *throws

class Father {public void method() throws RuntimeException {}
}

​ *throw

if(!(age >= 18 && age <= 120)) {throw new AgeException("年龄要在18-120之间")}

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

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

相关文章

MySQL行格式(row format)

MySQL行格式&#xff08;row format&#xff09; 表的行格式决定了其行的物理存储方式&#xff0c;这反过来又会影响查询和 DML 操作的性能。随着单个磁盘页面容纳更多行&#xff0c;查询和索引查找可以更快地工作&#xff0c;缓冲池中需要的高速缓存内存更少&#xff0c;写出…

耐高温300度锅炉轴承,江苏鲁岳轴承制造的行业标杆

自润滑轴承-产品类型-耐高温轴承-不锈钢轴承-江苏鲁岳轴承制造有限公司。锅炉轴承&#xff0c;耐高温至200度-800度。 江苏鲁岳轴承制造有限公司&#xff0c;一家专注于锅炉轴承和耐高温轴承的研发与生产的企业&#xff0c;致力于为客户提供高质量、高性能的轴承解决方案。其中…

使用 OpenCV 测量物体尺寸

使用 OpenCV 测量物体尺寸 你是否曾经遇到过这样的问题&#xff1a;想要知道计算器的精确尺寸&#xff0c;但手头又没有专业的测量工具&#xff1f;别担心&#xff0c;今天我们就来教大家一个简单又实用的方法&#xff0c;通过一张A4纸就能估算出计算器的宽度和高度&#xff0c…

iZotope RX 10 音频修复和增强工具 mac/win

iZotope RX 10 for Mac是一款出色的音频修复和增强工具&#xff0c;凭借其卓越的音频处理技术&#xff0c;能够轻松应对各种音频问题。 无论是背景噪音、回声还是失真&#xff0c;RX 10都能精准去除&#xff0c;还原清晰纯净的音频。同时&#xff0c;它还提供了丰富的增强工具&…

【Linux系统编程】第六弹---权限的概念

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、什么是权限 2、权限的本质 3、Linux中的用户 4、Linux中文件的权限 4.1、文件访问者的分类(角色) 4.2、文件类型和访问权…

Python 全栈安全(三)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十一章&#xff1a;OAuth 2 本章内容 注册 OAuth 客户端 请求对受保护资源的授权 授权而不暴露身份验证凭据 访问受保护的资源 OAuth …

人脑是怎么防止梯度消失和梯度爆炸的

人脑是怎么防止梯度消失和梯度爆炸的? 神经网络&#xff0c;也称为人工神经网络 (ANN) 或模拟神经网络 (SNN)&#xff0c;是机器学习的子集&#xff0c;并且是深度学习算法的核心。其名称和结构是受人类大脑的启发&#xff0c;模仿了生物神经元信号相互传递的方式。 感觉这个问…

亚马逊---设计安全架构

会从以下三个方面展开&#xff1a; 1、AWS资源访问安全 2、应用程序负载的网络安全 3、云中数据的安全 责任共担模式 就像租房子&#xff08;房东和你的责任&#xff09; AWS资源访问安全 需要掌握以下几点&#xff1a; 1、跨多个账户的访问控制和管理 2、AWS联合访问和身份服…

SpringMVC--RESTful

1. RESTful 1.1. RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。 RESTful是一种网络架构风格&#xff0c;它定义了如何通过网络进行数据的交互。这种风格基于HTTP协议&#xff0c;使得网络应用之间的通信变得更加简洁和高效。…

力扣283. 移动零

Problem: 283. 移动零 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义一个int类型变量index初始化为0&#xff1b; 2.遍历nums当当前的元素nums[i]不为0时使nums[i]赋值给nums[index]&#xff1b; 3.从index开始将nums中置对应位置的元素设为0&#xff1b; 复杂度 时间…

Java 异常处理详解

Java异常是Java编程语言中用于表示程序运行时错误的一种机制。Java异常体系通过异常类和异常处理来实现&#xff0c;允许程序在遇到预期或意外情况时&#xff0c;优雅地处理问题&#xff0c;而不是立即终止程序运行。 异常类层次结构 Java异常类都继承自java.lang.Throwable类…

python爬虫--------requests案列(二十七天)

兄弟姐们&#xff0c;大家好哇&#xff01;我是喔的嘛呀。今天我们一起来学习requests案列。 一、requests____cookie登录古诗文网 1、首先想要模拟登录&#xff0c;就必须要获取登录表单数据 登录完之后点f12&#xff0c;然后点击network&#xff0c;最上面那个就是登录接口…

Spring AI Summary

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Spring AI is a project that aims to streamline the development of AI applications by providing abstractions and reusable components that can be easily integrate…

【软考---系统架构设计师】软件架构

目录 1 一、软件架构的概念 二、软件架构风格 &#xff08;1&#xff09;数据流风格​​​​​​​ &#xff08;2&#xff09;调用/返回风格 &#xff08;3&#xff09;独立构件风格 &#xff08;4&#xff09;虚拟机风格 &#xff08;5&#xff09;仓库风格 三、架构…

labview中循环停止事件的深入研究

1.错误用法 第一次值事件运行的时候空白按钮给的F值&#xff0c;第二次值事件运行的时候空白按钮给的T值&#xff0c;这时循环才真正结束。 2.正确用法之一 赋值和值改变事件从同时进行变成按顺序执行。 3.正确用法之二 值事件发生以后超时事件将T值赋值给结束条件&#xff…

Linux环境变量深度解析

文章目录 一、引言二、环境变量的基本概念1、环境变量的定义2、环境变量的作用与意义 三、环境变量的导入1、导入所需文件2、登陆时的导入 四、环境变量的设置方法1、查看环境变量的方式2、使用export命令临时设置环境变量3、修改配置文件以永久设置环境变量 五、命令行参数与环…

免费听音乐,下载音乐mp3,mp4,歌词的网站分享(2024-04-22)

亲测&#xff01;&#xff01;&#xff01; 1、音乐客 免费听和免费下载 经典老歌 - 音乐客音乐客,yinyueke.net,免费音乐,免费在线音乐播放器,免费下载音乐,音乐&#xff0c;播放器&#xff0c;下载&#xff0c;播放&#xff0c;DJ&#xff0c;免费,mp3,高音质&#xff0c;…

LinkedList和链表

1.ArrayList的缺陷 ArraryList由于底层是一段连续的空间&#xff0c;所以在ArrayList任意位置插入或者删除元素时&#xff0c;就 需要将后续元素往前或者往后搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低&#xff0c;因此ArrayList不适合做任意位置插入和删除比较…

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order&#xff0c;本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟。如果一个测试人员执行需要10…

C++的初步知识——命名空间,缺省参数,重载函数

C 首先写一段代码&#xff1a; #include <stdio.h>int main() {printf("Hello world\n");return 0; }这段C语言代码在cpp文件中仍可运行。我们了解C是兼容C语言的&#xff0c;C的关键字中就包含了C语言的关键字和自身的关键字。关于关键字&#xff0c;我们简…