【Java SE】(十一) 异常

本文详细介绍了Java中的异常,包括异常的概念、异常的五个关键字(throw、try、catch、final、throws)以及异常的操作,如如何抛出异常、使用try-catch-finally捕获并处理异常。同时,讨论了异常的声明和自定义异常类的方法,并总结了异常处理的重要知识点。
摘要由CSDN通过智能技术生成

一、异常

1. 异常是什么

异常:程序在运行过程中发生的一些不正常的行为。
分类:

1.受查异常 (编译时异常)——需要在编译时处理掉,否则影响程序运行
例如:
2.非受查异常 (运行时异常)

2 . 异常的五个关键字

  1. throw、try、catch、 final、throws

二、异常的操作

1.抛出

>throw new XXXException(“异常发生的原因”); //java中使用throw关键字(new)抛出一个指定的异常对象。

XXXException中的XXX指抛出的异常类型;
1.throw必须写在具体的方法体中;
2.一旦异常抛出,异常其后的代码将不会执行
3.抛出的异常是是 RunTimeException 或者 RunTimeException 的子类,则可以不用处理,JVM会直接处理,但如果是编译时异常,用户必须处理;
4.抛出的异常必须继承Eception或者是Ecepthion的子类;

2.捕获

2.3.1 异常声明throws

throws处于方法声明时参数列表之后,即当前方法不处理异常,提醒给方法调用者处理。

语法格式:
修饰符 返回值类型 方法名(参数列表) throws 异常类型1,异常类型2…{
}

  1. throw必须放在方法体的参数列表后;
  2. 声明的异常与跑出的异常同样必须为Exception或者Exception的子类;
  3. throws声明多个异常时,异常之间可以用逗号隔开,但会导致编译时不清楚具体是哪个throws声明中的异常;
  4. 调用声明异常的方法时,调用者必须处理异常亦或是继续使用throws声明异常;

2.3.2 try-catch捕获并处理

throws只是对异常进行了声明。需要方法的调用者去处理这个异常,但用户想真正处理异常时,我们会用到try-catch。

语法格式:
try{
xxxxxxxx //可能出现异常的代码;
}catch(要捕获的异常类型 e){ // 如果try中的代码抛出异常了,(只要是处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异常的基类时,就会被捕获到)
xxxxxxxxxxxx // 对异常的处理,处理完成后,跳出try-catch结构,继续执行之后序代码
}

try块中可能会抛出多个异常对象,这时候就需要catch捕获多个异常并处理,可以在catch{}后继续添加对异常的处理,如下:(多个异常多种捕获)

try{
1.xxxxxxxxxxxxx //第一种将可能出现异常的代码
2.xxxxxxxxxxxxx //第二种将可能出现异常的代码
3.xxxxxxxxxxxxx //第三种将可能出现异常的代码
}catch(要捕获的异常类型1 e){
// 如果try中的代码抛出异常了,此处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异常的基类时,就会被捕获到
xxxxxxxxx 对异常的处理1 // 对异常就可以正常处理,处理完成后,跳出try-catch结构,继续执行后序代码
}catch(要捕获到异常类型2 e){
xxxxxxxxx 对异常的处理2 // 对异常进行处理
}catch

当多个捕获到的异常的处理方式是一样的,可以用一个catch捕获,但是要在try块中抛出要出现的所有捕获到处理方式一样的异常

try{
1.xxxxxxxxxxxxx //第一种将可能出现异常的代码
2.xxxxxxxxxxxxx //第二种将可能出现异常的代码
3.xxxxxxxxxxxxx //第三种将可能出现异常的代码
}catch(要捕获的异常类型1 e | 要捕获的异常类型2 e ){
// 如果try中的代码抛出异常了,此处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异
常的基类时,就会被捕获到
xxxxxxxxx 对异常的处理 // 对异常就可以正常处理,处理完成后,跳出try-catch结构,继续执行后序代码
}

也可以通过catch捕获所有异常(多个异常一次捕获)不推荐使用

try{
1.xxxxxxxxxxxxx //第一种将可能出现异常的代码
2.xxxxxxxxxxxxx //第二种将可能出现异常的代码
3.xxxxxxxxxxxxx //第三种将可能出现异常的代码
}catch(Eception e ){
// 如果try中的代码抛出异常了,此处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异
常的基类时,就会被捕获到
xxxxxxxxx 对异常的处理 // 对异常就可以正常处理,处理完成后,跳出try-catch结构,继续执行后序代码
}

注意:
1.try块抛出异常的位置之后代码将不会被执行;
2.若抛出的异常与catch捕获的异常不匹配,则异常不会被捕获,亦不会被处理,将会继续向外抛出直到被JVM捕获,异常是根据类型来捕获的
3.当异常时父子关系时,子类异常在前catch,父类异常在后catch,否则语法错误:

2.3.3 finally

finally用来处理一些特定要被执行的代码,即无论代码是否抛出异常都需要被执行,异常会引发程序的跳转,因此可能会导致有些语句执行不到

语法格式:
try{
可能会发生异常的代码
}catch(异常类型 e){
对捕获到的异常进行处理
}finally{
无论是否发生异常,都会被执行到 //不建议在这里写return,会被编译器警告
}
// 没有抛出异常/异常被捕获处理了,这里的代码也会执行

虽然finally 和 try-catch-finally 后的代码都会执行,finally一般进行一些资源清理的扫尾工作

三、自定义的异常类

虽然java已经设置了很多种异常类,但在实际运用中我们还是需要根据实际情况,设置维护符合我们的异常结构。
我们基于已有的异常类进行扩展,创建我们自己所需要的异常类

1.自定义异常类,然后继承自Exception 或者 RunTimeException
2.根据上述我们所说的异常的抛出、声明、捕获并处理的方法使用自定义类的异常

注意

1.自定义异常通常会继承自 Exception 或者 RuntimeException
2.继承自 Exception 的异常默认是受查异常
3.继承自 RuntimeException 的异常默认是非受查异常.

四、总结

异常的种类有很多,虽然java中已经有丰富的异常类了,但在实际运用中,我们还是需要根据实际情况来自定义一些自己的异常结构,因此我们必须掌握好异常的抛出、声明、捕获和处理的语法格式和注意事项,以及特定时被执行的代码使用的关键字等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@澄夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值