【JavaSE】Java入门九(异常详解)

目录

异常 

1.Java中异常的体系结构

2.异常的处理

3.自定义异常类


异常 

       在Java中,将程序执行过程中发生的不正常行为称为异常,C语言中没有这个概念,接下来我们重点需要掌握异常处理体系(try, catch, throw, finally)以及如何自定义异常类。

1.Java中异常的体系结构

异常的种类繁多,Java内部维护了一个异常的体系结构如下:

 Java中可以说是把所有的异常体系都封装了起来,在程序中遇到各种问题时,JVM会直接定位异常情况并在控制台提示。

其中Throwable是异常体系的顶层类,它的内部实现了让Java虚拟机抛出错误的代码。他派生出两个重要的子类Error和Exception。

Error:指的是Java虚拟机无法解决的严重问题,比如JVM的内部错误,资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError

Exception:异常产生后程序员可以通过代码进行处理的异常,使程序继续运行。

2.异常的处理

Exception异常的子类可以分为两种,一种是RunTimeException类,我们称为是运行时异常,其余的异常我们都称为是编译时异常。下面是异常处理的注意事项:

  1. 我们可以在方法体内部通过throw抛出一个Exception异常,异常一旦抛出后续代码就不会执行,我们可以通过异常捕获来使后续代码可以继续执行。
  2. 只有Exception异常和它的子类能被处理。
  3. 如果抛出的是运行时异常或者运行时异常的子类,可以不用处理,直接交给JVM来处理。
  4. 如果抛出的是编译时异常,用户必须处理,否则就无法通过编译。

 异常的处理流程:

1.throws声明异常

public void OpenConfig(String filename) throws FileNotFoundException{
if(filename.equals("config.ini")){
throw new FileNotFoundException("配置文件名字不对");
}
// 打开文件
}

一般在定义类的时候使用 ,如果方法内部抛出多个异常。throws后面必须跟多个异常类型,也可以直接声明他们的父类。

throws声明异常并没有进行处理,而是留给了调用者进行处理,调用者在调用声明抛出异常的方法时,必须对该异常进行处理,或者继续使用throws抛出。

2.try-catch捕获并处理

try {
int[] array = {1,2,3};
System.out.println(array[3]); // 此处会抛出数组越界异常
}catch (NullPointerException e){ // 捕获时候捕获的是空指针异常--真正的异常无法被捕获到
e.printStackTrace();
}

如上所示,try中存在异常代码,catch用来捕获异常,并通过printStackTrace()方法来打印该异常的详细信息。

3.try-catch-finally语句

       在实际应用中,异常的出现具有不确定性,那就导致了在try语句中异常出现位置之后的剩余代码面临着一个问题,如果该异常抛出了,剩余代码就不执行,没抛出就执行,写程序时有些代码我们希望无论程序是否发生异常都需要被执行,因此Java引入了finally语句。

语法格式:
try{
// 可能会发生异常的代码
}catch(异常类型 e){
// 对捕获到的异常进行处理
}finally{
// 此处的语句无论是否发生异常,都会被执行到
}
// 如果没有抛出异常,或者异常被捕获处理了,这里的代码也会执行

finally 执行的时机是在方法返回之前(try 或者 catch 中如果有 return 会在这个 return 之前执行 finally). 但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return.

3.自定义异常类

Java 中虽然已经内置了丰富的异常类 , 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构.

 

具体方式:
1. 自定义异常类,然后继承自 Exception 或者 RunTimeException
2. 实现一个带有 String 类型参数的构造方法,参数含义:出现异常的原因
class UserNameException extends Exception {
public UserNameException(String message) {
super(message);
}
}
class PasswordException extends Exception {
public PasswordException(String message) {
super(message);
}
}

 tips: 

  • 继承自Exception的异常默认是受查异常(编译时异常)
  • 继承自RuntimeException的异常默认为非受查异常(运行时异常)

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

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

相关文章

A01、关于JVM的GC回收

引用类型 对象引用类型分为强引用、软引用、弱引用,具体差别详见下文描述: 强引用:就是我们一般声明对象是时虚拟机生成的引用,强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用,如果被强引用&am…

容器技术:从虚拟机到轻量级容器的革命

一、引言 首先,什么是容器? 容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(Namespace&a…

你需要的圣诞祝福模板都在这里了!过不过圣诞都能用!

你需要的圣诞祝福模板都在这里了!过不过圣诞都能用! 在外国的朋友说,圣诞节收到公司的祝福邮件,但奇怪的是从不提“Merry Christmas”,一直用的是“Happy Holidays”“Seasons Greetings”和“Happy New Year”。 这其…

使用iframe后,鼠标点击位置和实际点击位置不一致

结论: 因为iframe域名和父页面域名不一致导致的 在本地启动项目的时候,鼠标指定的元素在iframe上,发现点击事件不起作用了 点击iframe里面的元素,发现也错位了, 上线之后,父页面部署的域名和iframe中src的…

SpringCloud微服务 【实用篇】| Docker镜像、容器、数据卷操作

目录 一:Docker基本操作 1. 镜像操作 镜像相关命令 2. 容器操作 容器相关命令 3. 数据卷(容器数据管理) 数据卷 操作数据卷 挂载数据卷 挂载的方式区别 前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂&#xff0…

在自己的网站上添加在线客服功能指南:轻松实现实时沟通

"怎么在自己的网站上添加在线客服功能?",Zoho SalesIQ它可以帮助你快速设置和自定义您的实时聊天系统。 只需复制粘贴一段代码,在5分钟内就可以完成代码安装。如果您还有其他问题,Zoho SalesIQ强大的服务支持团队非常乐…

什么是证券RPA?证券RPA解决什么问题?证券RPA实施难点在哪里?

RPA智能机器人,也称为“机器人流程自动化”、“软件机器人”,使用智能自动化技术来执行人类工人的重复性办公室任务。它结合API和用户界面(UI)交互来集成和执行企业和生产力应用程序之间的重复性任务。只要预先设计好使用规则,RPA就可以模拟人…

接口测试工具:Postman的使用

一、前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性。而这要求前端开发进度和后端进度保持基本一致,任何一方的进度跟不上,都无法及时…

c 实现jpeg中的ALI(可变长度整数转换)正反向转换

用于DC的ALI表:DIFF 就是前后两个8X8块DC的差值,ssss就是DIFF值用二进制表示的位数 亮度,与色度的DC都是这种处理的。两个相邻的亮度与亮度比差,色度与色度比差产生DIFF, 扫描开始DIFF等于0。 用于AC ALI表:表中的AC…

10个免费的 AI 工具,提升工作效率(附网址)

人工智能已经渗透到我们的日常生活中,但是,五花八门的AI工具可能会让人感到不知所措。所以我们精选了10个免费、用户友好的AI工具,它们既有效又实用,适合日常使用。 1.深度变换工具:DeepSwap的进化 DeepSwap&#xff…

Google Analystics账号的创建

1,空账号 如果您原来没有用过谷歌分析,点开后会是下面的页面,点击页面中央的开始衡量(start measuring) 2,已有过账号 如果您原本有过账号需要创建新账号,需要点击主页左下角的管理&#xff…

基于ssm电脑公司财务管理系统论文

电脑公司财务管理系统 摘要 随着信息互联网购物的飞速发展,一般企业都去创建属于自己的管理系统。本文介绍了电脑公司财务管理系统的开发全过程。通过分析企业对于电脑公司财务管理系统的需求,创建了一个计算机管理电脑公司财务管理系统的方案。文章介…

IDEA添加Apifox插件后,返回参数不详细解决办法

Apifox官方文档地址(文档中返回的是特殊情况,跟我现在项目的返回不一样,因此需要更改配置) 点击跳转到官方API地址 实现步骤分为两步:第一步:添加配置,第二步使用注解。 1.添加配置 打开Idea设置,添加配置…

初级数据结构(六)——堆

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;五&#xff09;——树和二叉树的概念 | NULL 下一篇-> 1、堆的特性 1.1、定义 堆结构属于完全二叉树的范畴&#xff0c;除了满足完全二叉树的限制之外&#xff0c;还满…

通过外包团队迅腾文化灵活管理企业资讯内容输出,助力企业方对外信息的及时性与准确性

通过外包团队迅腾文化灵活管理企业资讯内容输出&#xff0c;助力企业方对外信息的及时性与准确性 随着信息时代的快速发展&#xff0c;企业信息的及时性和准确性对于企业的成功至关重要。外包团队迅腾文化以其灵活的管理方式&#xff0c;为企业提供了高效、准确的企业资讯内容…

【神器】wakatime代码时间追踪工具

文章目录 wakatime简介支持的IDE安装步骤API文档插件费用写在最后 wakatime简介 wakatime就是一个IDE插件&#xff0c;一个代码时间追踪工具。可自动获取码编码时长和度量指标&#xff0c;以产生很多的coding图形报表。这些指标图形可以为开发者统计coding信息&#xff0c;比如…

Java爬虫采集房源信息解决朋友店铺选址难题

昨天我帮朋友选择了适合的开店种类&#xff0c;今天同样的&#xff0c;利用爬虫技术采集店铺房源信息&#xff0c;为朋友店铺开店选址提供一份建议&#xff0c;数据筛查只是作为信息整理的一部分&#xff0c;重要的还是要看地点人流量还需要实地考察才行&#xff0c;我的数据只…

音视频:Ubuntu下安装 FFmpeg 5.0.X

1.安装相关依赖 首可选一&#xff1a; sudo apt-get update sudo apt-get install build-essential autoconf automake libtool pkg-config \libavcodec-dev libavformat-dev libavutil-dev \libswscale-dev libresample-dev libavdevice-dev \libopus-dev libvpx-dev libx2…

不会代码循环断言如何实现?只要6步!

对于使用jmeter工具完成接口测试的测试工程师而言。在工作中&#xff0c;或者在面试中&#xff0c;都会遇到一个问题—— “CSV文档做了一大笔测试数据后&#xff0c;怎么去校验这个结果呢&#xff1f;” 现在大部分测试工程师可能都是通过人工的方法去查看结果&#xff0c;十…

HTML5+CSS3小实例:纯CSS实现锚点平滑过渡

实例:纯CSS实现锚点平滑过渡 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"&…