Java异常超详细讲解(超简单理解)

本文详细介绍了Java中的异常处理机制,包括异常的概念、使用if-else与异常处理的区别,try-catch-finally结构,异常分类(Error类和Exception类,运行时异常和Checked异常),自定义异常的创建与应用场景,以及如何通过throws和throw关键字声明和抛出异常。

7000字的文章,实属不易,如果看着合适请动动小手点点关注,点点点赞,点点收藏吧,谢谢!

不喜勿喷,谢谢!

使用工具 IntelliJ IDEA Community Edition 2023.1.4

 使用语言 Java8/JDK1.8

目录

1.初识异常

1.1 异常概念

1.2 计算机两大杀手

1.3 使用if-else替代异常的缺点

2.异常处理机制

2.1 异常处理结构

2.1.1 异常处理结构语法

2.1.2 异常格式的常见组合

2.2 在程序中处理异常

2.2.1 使用try-catch语句处理异常

2.2.2 2.使用try-catch-finally语句处理异常

2.3 多重catch语句

 2.4 异常分类及处理流程

2.4.1 Error类和Exception类

2.4.1.1 Error类

2.4.1.2 Exception类

2.4.1.2.1 运行时异常

2.4.1.2.2 Checked异常

2.4.2 Java异常处理流程总结

2.4.3 声明异常——throws关键字

2.4.3.1 throws语法

2.4.3.2 调用声明异常方法的处理方式(不处理会报错) 

2.4.3.3 声明异常的好处

2.4.4 抛出异常——throw关键字 

2.4.5 自定义异常

2.4.5.1 自定义异常的三个步骤

2.4.5.2 throw关键字的应用场景


1.初识异常

1.1 异常概念

在生活中,异常情况随身都有可能发生。下面将从生活中的异常过渡到程序,帮助大家建立对异常的初步认识。

在日常生活中,几乎随时随处可能出现意外情况。以学校生活为例,在上学的路上发生交通事故或拥堵、教员生病、教室投影不能正常使用、机房网络感染病毒等,这些都是意外情况。虽然这些意外情况是偶然事件,但是一旦发生就会带来不小的麻烦,影响正常的学习生活。同理,在程序中也会发生类似的情况,下面看看程序中的异常。

在程序开发过程中, 程序员虽然会尽量避免错误的发生,但是总会遇到一些不可预期的问题,如除法运算时除数为0、数组下标越界、数据类型不一致、内存不足、栈溢出等,这些就是异常。

1.2 计算机两大杀手

在计算机的发展中有两大计算"杀手",一个是断点,另外一个是除数为0.因为除数在为0在数学的解是无穷大,对于计算机来说,如果是无穷大,则意味着内存将全部占满,所以,在程序开发中,务必避免除数为0的情况。

1.3 使用if-else替代异常的缺点

  1. 无法穷尽所有的异常情况(因为受程序员知识的限制,异常情况总比可以考虑到的情况多,总会有"漏网之鱼",所以程序总不够健壮);
  2. 影响程序可读性,维护难度高(这种错误处理和业务逻辑混杂的代码严重影响程序的可读性,增加程序维护的难度。

2.异常处理机制

在程序设计时,必须考虑到可能发生的异常事件并进行相应的处理,这样才能保证程序正常运行。

Java的异常处理机制也秉承着面向对象的基本思想,在Java中,所有的异常都定义为类。除了内置的异常类,Java也可以自定义异常类。此外,Java的异常处理机制也允许自行抛出异常。

2.1 异常处理结构

2.1.1 异常处理结构语法

Java针对异常的处理提供了try、catch、finally、throws。throw五个核心关键字,其中前三个关键字就可以组成常用的异常处理结构,语法如下:

try{
  //有可能出现异常的语句
}
[catch(异常类型 异常对象){
  //异常处理语句
}]
[finally{
  //一定会允许到的语句
}]

其中,try语句用于监听,将可能抛出异常的代码放在try语句块内,当try语句块内发生异常时,异常就会被抛出;catch语句用于捕获异常,catch语句用来捕获try语句块中抛出的异常;finally语句块总会被执行,主要用于回收try语句块内打开的资源,如数据库连接,网络连接和磁盘文件。

2.1.2 异常格式的常见组合

以上个事中的catch语句、finally语句都可选。实际上,这并不是表示catch语句、finally语句可以同时消失。异常格式的常见组合有try-catch、try-catch-finally、try-finally三种。        

2.2 在程序中处理异常

2.2.1 使用try-catch语句处理异常

以上程序使用了异常处理语句,当程序出现异常时,异常会被try语句监听到,然后被JVM(Java虚拟机)抛出,被catch语句捕获进行处理,执行catch语句内的异常处理代码,不再需要程序员自行编写if语句进行判断,简化了代码。

使用Java异常处理机制的目的是帮助程序员发现异常并解决异常。以上代码中采用输出错误提示的发生处理异常,不能明确地描述异常类型,不能精确定位问题所在。更好的方法是使用异常类中提供的printStackTrace()方法进行异常信息但完整输出。

捕获异常中的异常对象.printStackTrace();即可进行异常信息的完整输出。

从上述代码可以看出,Java异常处理机制可以自动捕获不同类型的异常。如果try语句块在执行过程中遇到异常,则异常处之后的代码将不再被执行,系统会将异常信息封装成相应类型的异常对象,包含异常的类型、异常出现时程序的运行状态及对该异常的详细描述。如果这个异常对象与catch语句中声明的异常类型相匹配,则会被自动捕获,Java异常处理机制把该异常对象赋给catch关键字后的异常参数,执行catch语句块中的语句。Exception类型的常用方法如下:

void printStackTrace()

输出异常堆栈信息。堆栈信息中包含程序运行到当前类的执行流程,它将输出从方法调用处到异常抛出处的方法调用序列。

String getMessage()

返回异常的详细信息。该信息描述异常产生的原因,是printStackTrace()方法输出信息的一部分。

因为使用printStackTrace()方法输出的异常信息是最完整的,所以后续会使用该方法进行异常信息输出。在其输出结果中,可以自下向上观察程序的运行轨迹,最终定位到异常发生的位置。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值