Java笔记-异常相关

news2025/5/25 17:55:49

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

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:属于异常处理的一种方式,在方法声明处声明

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

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

相关文章

docker安装青龙面板薅羊毛(新手教程,大佬可略过)

当然如果没有服务器的,强烈推荐腾讯云,1核2G的服务器,一年原价1000多块的服务器,现在有活动新用户一年也就70元,也就一顿外卖钱。完全白嫖啊。本博客用的就是腾讯云 1核2G的轻量服务器,速度怎么样可以自己感…

安卓小游戏:贪吃蛇

安卓小游戏:贪吃蛇 前言 这个是通过自定义View实现小游戏的第二篇,实际上第一篇做起来麻烦点,后面的基本就是照葫芦画瓢了,只要设计下游戏逻辑就行了,技术上不难,想法比较重要。 需求 贪吃蛇&#xff0…

解决:ChatGPT too many requests in 1 hour.Try again later 怎么办?OpenAI 提示

ChatGPT 提示: Too many requests in 1 hour. Try again later. 如下图,我多次访问也出现同样的问题。中文意思是太多的请求数量在当前 1 个小时内,请稍后重试。那怎么办?怎么解决? 一、问题现象 我基本试了半个小时&…

二分查找基本原理

二分查找基本原理1.二分查找1.1 基本概念1.2 二分查找查找步骤1.2.1 中间索引不能整除,取整数作为中间索引1.2.2 索引不能整除,整数1作为中间索引1.3 二分查找大O记法表示2. 二分查找代码实现1.二分查找 1.1 基本概念 二分法(折半查找)是一…

【第37天】斐波那契数列与爬楼梯 | 迭代的鼻祖,递推与记忆化

本文已收录于专栏🌸《Java入门一百例》🌸学习指引序、专栏前言一、递推与记忆化二、【例题1】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、【例题1】1、题目描述2.解题思路3、模板代码4、代码解析5、原题链接三、推荐专栏四、课后习题序…

数据库原理及应用基础知识点

数据库原理基础知识点大全数据库原理及应用1、数据库系统概述1.1 基本概念1.2 数据模型1.3 数据库系统的结构2、实体 -- 联系模型2.1 基本概念2.2 实体-联系图2.3 弱实体集3、关系数据模型3.1 关系数据库的结构3.2 从ER模型到关系模型3.3 关系操作、完整性约束、关系代数4、关系…

Nacos安装配置(二)

目录 一、概述 二、Nacos 安装 A)Debian11 1)软件环境 2)下载源码或者安装包 3)mysql配置 4)启动服务器 B) Debian11 1) 安装JDK 2) 安装Maven 3) 安装Nacos2 4) 修改访问参数(/conf/applicati…

GEE:下载研究区同一天的Landsat影像

本文记录了下载Landsat逐日数据的代码,包装成了函数。直接输入数据集合就可以直接使用。 并在下文中应用了该函数,以下载2022年逐日地表温度LST数据,和下载研究区多波段影像为例。 结果如图所示 文章目录 一、调用方法二、Landsat 逐日下载函数三、应用示例1——下载2022年研…

RNN循环神经网络原理理解

一、基础 正常的神经网络 一般情况下,输入层提供数据,全连接进入隐藏层,隐藏层可以是多层,层与层之间是全连接,最后输出到输出层;通过不断的调整权重参数和偏置参数实现训练的效果。深度学习的网络都是水…

【安全知识】——对Linux密码文件的处理

作者名:白昼安全主页面链接: 主页传送门创作初心: 一切为了她座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日emo:他既乐观又悲观,生活也一无是处昨天在挖掘…

mycat2使用

安装部署下载1:mycat2-install-template-1.21.zip下载2:mycat2-1.21-release-jar-with-dependencies.jar解压mycat2-install-template-1.21.zipunzip mycat2-install-template-1.21.zip把mycat2-1.21-release-jar-with-dependencies.jar放在mycat/lib中修…

神码ospfv3配置.docx

一.配置各设备的ip地址 sw1(config)#ipv6 enable sw1(config)#vlan 1000 sw1(config-vlan1000)#swi int eth1/0/3 Set the port Ethernet1/0/3 access vlan 1000 successfully sw1(config)#int vlan 1000 sw1(config-if-vlan1000)#ipv6 address aa::aa/64 sw1(config-if-vla…

分享微信商城小程序搭建步骤_微信公众号商城小程序怎么做

如何搭建好一个微信商城?这三个功能要会用! 1.定期低价秒杀,提高商城流量 除了通过私域流量裂变,低价秒杀是为商城引流提高打开率的良好手段。 以不同节日作为嘘头,在情人节、38妇女节、中秋国庆、七夕节等日子&…

Node=>Express中间件 学习3

1.概念: 例:在处理污水的时候,一般都要经过三个处理环节,从而保证处理过后的废水,达到排放标准 处理污水的这三个中间处理环节,就可以叫中间件 2.中间件调用流程 当一个请求到达Express的服务器之后&#x…

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

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

Google杀入AI聊天机器人领域,暴跌千亿?错哪了?

大家好,ChatGPT 现在被大家玩坏了,甚至在用户的不断逼问之下,露出了鸡脚,原来 ChatGPT 也是小黑子ChatGPT 太火了,火的谷歌都坐不住了。为了应对爆火的ChatGPT,谷歌推出的Bard,但是谷歌翻车了&a…

Python Web 框架要点

Python Web 框架要点 1. Web应用程序处理流程 2. Web程序框架的意义 用于搭建Web应用程序免去不同Web应用相同代码部分的重复编写,只需关心Web应用核心的业务逻辑实现 3. Web应用程序的本质 接收并解析HTTP请求,获取具体的请求信息处理本次HTTP请求&a…

三大基础排序算法——冒泡排序、选择排序、插入排序

目录前言一、排序简介二、冒泡排序三、选择排序四、插入排序五、对比References前言 在此之前,我们已经介绍了十大排序算法中的:归并排序、快速排序、堆排序(还不知道的小伙伴们可以参考我的 「数据结构与算法」 专栏)&#xff0…

【内网安全】——数据库提权姿势

作者名:白昼安全主页面链接:主页传送门创作初心: 一切为了她座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日emo: 在哪能找到解救我的办法模拟环境我们拿到了一个普通用…

java开发-用户注册-MD5工具加密密码

加密方式介绍 对称加密:加密和解密使用的相同的密钥,常见的对称加密算法有:DES、3DES非对称加密:加密和解密使用的密钥不同,常见的非对称加密算法有:RSA 加密:使用私钥加密解密:使用公钥解密 消息摘要: 消…