从零开始学java(27)--- 异常

Java异常处理详解:从零开始到熟练掌握 在Java中,异常是指程序运行过程中遇到的不正常情况(abnormal conditions),这些情况会导致程序无法按照预期执行。异常可以是由于语法错误、逻辑错误或外部环境问题引起的。在Java中,开发者可以根据实际需求自定义异常。根据业务逻辑定义特定的错误。提供更明确的错误信息。继承Exception类// 可以添加自定义属性和方法抛出或捕获自定义异常try {throw new MyCustomException("这是一个自定义异常"); 阅读详情

Day17

今天了解java中的异常处理机制

java使用面向对象的方式来处理异常,它把程序中发生的每个异常分别封装到一个对象中,该对象包含有异常的信息.所有异常的根类Throwable,Throwable又派生了两个子类,Error和Exception,Exception包括运行时异常(RuntimeException)和受检异常。

在这里插入图片描述常见的运行时异常有:

NullPointerException

ClassCastException

ArrayIndexOutOfBoundsException

ArithmeticException

IllegalArgumentException

IllegalStateException

1.异常处理机制

异常是程序不希望出现的情况,在异常出现以后,需要处理,才能让程序继续执行。Java提供了若干的异常类,当异常发生时,JVM会创建对应异常类的实例

异常类的层次:

Exception:需要处理 Error:无需处理
RuntimeException:该异常及其子类都是运行时异常,语法上无需显式处理
除RuntimeException之外,其他的Exception都是受检异常,语法上必须显式处理。

2.关键字:

try,catch,finally ,throw ,throws

1.捕获异常

捕获异常是通过3个关键词来实现的:try-catch-finally。用try来执行一段程序,如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它,最后一步是通过finally语句为异常处理提供一个统一的出口,finally所指定的代码都要被执行(catch语句可有多条;finally语句最多只能有一条,根据自己的需要可有可无)。
 
注意点:
1、一个try语句必须带有至少一个catch语句块或一个finally语句块,当异常处理的代码执行结束以后,不会回到try语句去执行尚未执行的代码。
2、每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
3、不管是否发生了异常,即使try和catch块中存在return语句,finally都必须要执行
4、finally语句块只有一种情况是不会执行的,那就是在执行finally之前遇到了System.exit(0)结束程序运行(结束当前正在运行中的java虚拟机)。

try{
    //可能抛出异常的代码
}catch(Exception e){
}finally{
  //可选,无论try是否有异常,finally中的语句都会执行
}

可以出现多个catch子句,抛出的异常会依次进行catch的比较,有互斥的效果(也就是只会catch try中的第一个异常)。

try{
    //可能抛出异常的代码
}catch(RuntimeException e){//如果有父子关系,先子
}catch(Exception e){//后父
}finally{
  //可选,无论try是否有异常,finally中的语句都会执行
}

多个异常有父子关系,先catch子类异常,后面catch父类异常。

finally主要释放try里代码打开的资源。

在Java1.7 提供了新的语法:
1.catch(多个并列的异常,使用 | 分隔)

2.try(实例化实现了AutoCloseable接口的类) 在执行完try-catch后自动调用其close方法

2.声明异常(throws子句)

当CheckedException产生时,不一定立刻处理它,可以再把异常throws出去。如果一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常,之间以逗号隔开。
throw:在条件成立时,throw 异常实例。
1:只能用于方法体内。
2:后面跟异常对象。
3:只能跟一个异常对象
throws:用于方法声明,表示该方法可能抛出异常,如果异常是受检异常,调用该方法的时候必须处理。

1:用在方法的声明处。参数列表的后面方法体的前面。
2:后面跟异常的类型。
3:可以跟多个异常类型。使用 逗号 分隔。

一些注意的点

1.异常被成功catch之后,代码会继续向后执行
正常情况下要输出错误相关堆栈信息,或输出可以帮助定位问题的日志信息。也可以为空(不推荐)。//一般用e.printStackTrace();

2.异常未被成功catch,则不会继续向下执行代码
异常会继续向上抛,后续代码不会继续执行。

3.成功捕获异常后使用throw直接抛出,不对异常进行处理,代码不会继续向下执行。

4.方法名后使用throws声明可能会抛出的异常,异常产生后交给上层调用方法处理。

5.try-catch-finally成功捕获异常,执行finally中代码,并继续执行try-catch-finally块后面的代码。

6.try-catch-finally未成功捕获异常,执行finally中代码,停止执行try-catch-finally块后面的代码。

注:
1.try-catch-catch-catch-finally中如果成功捕获异常,只会有一个catch起作用,如果有其他的异常,只会捕获第一个。

2.java异常处理用到了多态的概念,如果在异常处理过程中,先捕获了基类,然后在捕获子类,那么捕获子类的代码块永远不会执行.因此,在进行异常捕获时,正确的写法是先捕获子类,再捕获父类的异常信息。

3.异常能处理就处理,不能处理就抛出.对于一般异常,如果不能进行行之有效的处理,最好转换成运行时异常抛出.

3.关于受检异常和非受检异常

一直以来,关于在程序中到底是该使用受检异常还是非受检异常,开发者之间一直存在着争议,毕竟两类异常都各有优缺点。

受检异常的特点在于它强制要求开发人员在代码中进行显式的声明和捕获,否则就会产生编译错误。这种限制从好的方面来说,可以防止开发人员意外地忽略某些出错的情况,因为编译器不允许出现未被处理的受检异常;从不好的方面来说,受检异常对程序中的设计提出了更高的要求。不恰当地使用受检异常,会使代码中充斥着大量没有实际作用、只是为了通过编译而添加的代码。而非受检异常的特点是,如果不捕获异常,不会产生编译错误,异常会在运行时刻才被抛出。

非受检异常的好处是可以去掉一些不需要的异常处理代码,而不好之处是开发人员可能忽略某些应该处理的异常。一个典型的例子是把字符串转换成数字时会发生java.lang.NumberFormatException异常,忽略该异常可能导致一个错误的输入就造成整个程序退出。

目前的主流意见是,最好优先使用非受检异常。

4.自定义异常

前面所讲的异常,都是系统自带的,系统自己处理,但是很多时候项目会出现特有问题,而这些问题并未被java所描述并封装成对象,所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的问题进行自定义异常封装。在Java中要想创建自定义异常,需要继承Throwable或者他的子类Exception。

1.继承类

一般会选择继承Exception或RuntimeException,如果不要求调用者一定要处理抛出的异常,就继承RuntimeException。
目前业界推荐使用继承RuntimeException。

2.自定义异常类构造方法

class  自定义异常类 extends 异常类型(Exception){

 	/** 因为父类已经把异常信息的操作都完成了,所在子类只要在构造时,
 	将异常信息传递给父类通过super 语句即可。**/
  	// 具体有哪些构造方法有参或者无参可以查看父类的API。
}
异常解码:从零开始理解 Java 异常 异常处理是Java开发中非常重要的一部分,它能够帮助我们在程序运行中发现和解决问题。本文将介绍Java中的异常处理机制,包括如何使用try-catch语句捕获和处理异常,使用finally块执行必须执行的代码,以及如何手动抛出异常。异常处理是一种程序设计技术,它可以使我们的程序在出现错误时能够继续执行或者进行错误处理。Java提供了强大的异常处理机制,能够让我们的代码更加健壮和可靠。在Java中,异常是指程序运行中发生的错误或意外情况。 阅读详情

相关推荐

微信取证不求人:最新免费DAT解码工具使用指南(含闪退解决方案)

本文提供了一份详细的微信DAT文件免费解码工具使用指南。针对用户常见的图片无法查看问题,手把手教学如何安全获取并操作开源图形化工具,将加密的DAT文件一键还原为JPG/PNG图片。文章重点剖析了DAT文件的加密原理,并给出了详细的步骤解决工具运行中最常见的“程序闪退”等疑难杂症,帮助普通用户轻松完成微信取证。

m0n1o2p的博客 479

从零开始学java--异常机制

Java面向对象高级篇——异常机制

PluMage11的博客 1048

基于SolidWorks宏的草图点坐标自动化提取与Excel集成

本文详细介绍了如何利用SolidWorks宏编程实现草图点坐标的自动化提取并与Excel集成,显著提升机械设计效率。通过VBA代码解析与优化,解决了人工记录坐标耗时易错的问题,并扩展了多草图批量处理、数据可视化等高级功能,适用于数控加工、质量检测等场景。

weixin_29251131的博客 462

Java、从零开始学异常

本文介绍了Java异常处理的相关知识,主要内容包括: 异常的概念和分类:异常分为受查异常(编译时异常)和非受查异常(运行时异常),常见的异常类型包括空指针异常、算术异常和数组越界异常等。 throw和throws关键字:throw用于主动抛出异常,throws用于声明方法可能抛出的异常类型。 异常处理方式: 防御型编程:提前预防可能的异常 try-catch捕获异常:使用try-catch块捕获并处理异常 finally块:确保必要代码的执行 自定义异常:介绍了自定义异常的必要性和实现步骤。 文章通过代码示

加油,量变引起质变 382

公开 学生课堂行为数据集 SCB-Dataset: A Dataset for Detecting Student and Teacher Classroom Behavior

公开 学生课堂行为数据集 SCB-Dataset Student Classroom Behavior dataset

CSPhD-winston的博客 1万+

Android AVB 分析(十二)嵌入式设备安全中的 dm-verity 简介

上一篇 《Android AVB 分析(十一)bootloader 是如何进行 verify boot 检查的?》 分析了 bootloader 中是如何调用 libavb 函数库验证 vbmeta 和 boot 等分区的。接下来就打算写一篇介绍 dm-verity 原理的文章,然后再写一篇徒手 dm-verity 实践的文章,结果偶然发现了本篇的英文原版。写得太好,我觉得自己完全没有必要再写原理了。由于原文是英文,有些英语不太好的朋友不一定能完全理解。我花了点时间,结合 AI 将英语原文翻译成中文。

洛奇看世界 3598

84从零开始学Java之抛出和声明异常的代码实现

在上一篇文章中,壹哥带大家通过代码实现了异常的捕获和处理,但是异常除了捕获之外,还可以进行声明和抛出。今天壹哥会再次通过一篇文章,来教会大家该如何进行异常的抛出。前戏已做完,精彩即开始全文大约【4000】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图视频,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......我们在编写代码时,有时候因为某些原因,并不想在这个方法中立即处理产生的异常,也就是说并不想进行异常的捕获。

一一哥 778

Vue - 详细完美解决 ElementUI MessageBox “多次“ 弹框问题,让其无论执行多少次都只弹出来一次(常见于请求拦截器多次触发弹框,导致弹出来很多个)详细示例代码,保证完美解决!

vue如何防止ElementUIMessageBox多次弹框,vueelement弹框弹出来很多次怎么办,elementvueMessageBox解决执行多次后出现多次弹框的问题,elementUI如何阻止MessageBox多次弹出来,vue+element解决多个请求同时报错,弹出多个消息框message,饿了么组件库MessageBox弹框频繁弹出解决方法,vue调用MessageBox出现多次弹框,vueelementMessageBox怎么只弹出一次,vue之axios请求

🏆 前端领域优质创作者 8196

【16】JAVASE-异常专题【从零开始学JAVA】

从零开始学Java系列课程

波波烤鸭的博客 926

unitree-G1外接 USB 麦克风完整配置指南

首先,将type-c麦克风插入G1机器人的USB口后,记录下USB麦克风的卡号(card)和设备号(device),通常显示为 card 1: Device [USB Audio Device]

m0_47999117的博客 600

锂电池SOH估计 | 基于LSTM模型的锂电池SOH估计(Python)

锂电池SOH估计 | 基于LSTM模型的锂电池SOH估计(Python)

前程算法屋的博客 1434

83从零开始学Java之捕获和处理异常的代码实现

在上一篇文章中,壹哥带大家简单认识了Java中的异常处理机制,但这些内容主要是偏重于理论,接下来我会带大家学习具体的代码实现。现在我们知道,Java的异常处理是通过5个关键字来实现的,即try、catch、throw、throws和finally。try catch语句用于捕获并处理异常,finally语句用于在任何情况下(除特殊情况外,比如提前调用了System.exit()退出虚拟机的方法)都必须执行的代码,throw语句用于拋出异常,throws语句用于声明可能会出现的异常。

一一哥 769

ECU诊断功能测试:从理论到实践

ECU诊断功能是指通过特定的诊断协议与ECU进行通信,以获取ECU的状态信息、故障码、数据流等,并执行特定的诊断操作。诊断功能的主要目的是帮助开发人员和维修人员快速定位和解决ECU中的问题,确保车辆的安全性和可靠性。UDS协议是ISO 14229标准的一部分,定义了一系列的诊断服务,如读取故障码、清除故障码、读取数据流等。UDS协议基于CAN(Controller Area Network)总线,具有较高的灵活性和扩展性。读取故障码是诊断功能中最基本的操作之一。通过读取故障码,可以快速定位ECU中的问题。

闲人编程的博客 1807

82从零开始学Java之异常处理机制简介

大家可以想一个问题,有没有谁能够做到开发项目时一个错误都不发生?如果谁能够做到这一点,那他可能真的是“天才”!但实际上,任何人都不可能在项目开发时一个错误都不产生,既然错误必不可免,那么Java是怎么处理这些问题的呢?实际上,Java给我们提供了一套完善的异常处理机制来检查和解决可能出现的错误,以保证程序的可读性和可维护性。但我们要注意,Java中的异常和错误其实是两种不同的概念。

一一哥 735

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

从零开始学JAVA——异常处理

在局部内部类的方法中(比如:show)如果调用局部内部类所声明的方法(如:method)中的局部变量(比如:num)的话, 要求此局部变量声明为final的。 jdk7及之前版本:要求此局部变量显式声明为final jdk8及以后的版本,可以省略final的声明 public void method() { //局部变量 final int num =10; class AA{ public void show() { // num = 20; System.out

man的博客 216

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从零开始的Java异常

异常 1.异常的概念: 广义:一切不正常情况 狭义:程序在运行时,出现的不正常情况,经过异常处理机制 后,程序可以继续向下运行。 Java程序在执行过程中所发生的的异常(运行时一切不正常情况)事件可分为两类: **Error:**Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。 **Exception:**其它因编程错误或偶然的外在因素导致的一般性问题,可以使用正对性的代码进行处理。 2.常见的异常: /*

weixin_45866849的博客 187

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从零开始学Java——基础篇

整理自菜鸟教程   Java 简介 Java是Java面向对象程序设计语言和Java平台的总称。 Java分为三个体系: JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版) JavaME(J2ME)(Java...

绝圣弃智-零的博客 1万+

从零开始学数据结构和算法,Java基础:异常

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84011114的博客 1138

从零开始学Java,学习笔记Day20

异常机制,,,多线程,,,

qq_51876888的博客 1701

【从零开始学习JAVA 】 异常(下)

文我们详细的为大家介绍了整个异常体系的框架,本篇我们将为大家介绍Exceptions异常,我们会讲解他的作用以及如何捕获,这一篇很重要!!在搭建后端以及与前端交互的时候是一个很好用的技能(Spring体系中的全局异常处理器就可能需要我们自己针对业务设置相关的异常并且进行处理),因此我们即使不看本篇文章,也一定要自己积极主动了解相关内容!!在Java中,可以通过创建自定义异常类来实现用户定义的异常。自定义异常类可以根据特定的业务需求或异常情况,提供更具体、更清晰的异常信息,并允许开发者以自定义的方式处理异常。

2301_80615512的博客 1293

85从零开始学Java之异常处理的新特性

本文介绍了Java异常处理的新特性,包括多异常捕获和自动资源管理。多异常捕获允许在单个catch块中处理多个异常类型,减少代码冗余。自动资源管理通过try-with-resources语句自动关闭实现了AutoCloseable接口的资源,避免了繁琐的finally块,并在JDK9中进一步优化为支持多个final修饰的资源对象。这些特性使异常处理代码更简洁高效,提升了程序的可读性和健壮性。文章还提供了详细代码示例和注意事项,帮助开发者正确运用这些新特性。

一一哥 335

从零开始学Java 第12章 异常处理

第12章 异常处理世界上没有完美的事情,一个完善的程序不可能总是会准确无误的运行,它们的运行流程都是在开发人员所预料的范围之内。但是,实际却不尽人意。在程序的运行过程中可能会因为各种原因而导致出现错误,例如用户的误操作,各种环境原因等。Java为此提供了异常处理机制。通过这套机制就可以将容错率提高。本章就主要介绍Java的异常处理机制。12.1 异常Java中的异常处理是提前给出程...

agsmigb80093的博客 174

java从零开始_Java从零开始学十九(异常)

一、什么是异常从字面上讲,就是不正常的现实就是异常。程序中的异常也是要在程序运行中才会偶尔发生。如果程序还没有运行,编译就报错,这种不叫异常,这种叫编译错误,通常是语法上的错误二、java中异常Java 提供了两类主要的异常:runtime exception 和checked exception。所有的checked exception 是从java.lang.Exception 类衍生出来的,...

weixin_33606346的博客 114

从零开始学Java系列汇总

因为优快云没有分类归纳博客的功能,所以特写本帖汇总《从零开始学Java系列》,方便大家查阅!希望各位小伙伴从本系列中可以从我的拙作中能对Java的高频面试题有所掌握,也希望各位可以多给与指教!

一一哥 1256

从零开始学 Java - Spring MVC 统一异常处理

从零开始学 Java - Spring MVC 统一异常处理

qq_38472451的博客 110

从零开始学java(三十二)--异常机制(二)try-catch捕获异常

从零开始学java(三十二)--异常机制(二)CheckedException已检查异常异常处理的方式try-catch捕获异常 CheckedException已检查异常 所有不是RuntimeException的异常,统称为Checked Exception,又被称为“已检查异常”,如IOException、SQLException等以及用户自定义的Exception异常。 这类异常在编译时就必须做出处理,否则无法通过编译。 异常处理的方式 异常的处理方式有两种:使用“try/catch”捕获异常、使

weixin_43389063的博客 980
上一篇: 从零开始学java(26)--- 集合框架
下一篇: 从零开始学java(28)--- IO
Muyaaa
博客等级 码龄9年 18粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值