java笔记之异常
程序员文章站
2022-03-02 10:13:36
...
前言
exception是java中的完美机制之一。方法在完成过程中由于某种原因而不能正常的达到目的,这样的现象称为异常。
本文主要介绍异常的处理方式,异常的分类,自定义异常。
正文
异常的处理方式
1.抛异常:
在发生的方法行为中,将异常传递出去,交由其他地方处理。
1)语法
修饰符 放回值类型 方法名(参数列表) throws 异常类名,异常类名{
//类体
}
}catch(异常类名 变量名){
//异常的处理,替代方案
}
2.捕捉异常
异常在方法中发生后,立即对其采取处理。
1)语法
try{
//语句块
}catch(异常类名 变量名){
//异常的处理,替代方案
}catch(异常类名 变量名){
//异常的处理,替代方案
}finally{
//代码块
}
注:
1)捕捉异常的优先顺序
catch块中是需要捕捉的异常,捕捉按照小类型到大类型的顺序捕捉,不能倒置;
如果捕捉的异常存在继承关系,应该先捕捉小类型,再捕捉大类型的异常。若不存在继承关系,那么无捕捉的优先顺序。
2)try,catch,finally的个数
try只能有一个;catch可以有,也可以没有;finally也可以有没有;
但catch和finally至少出现一个。
3)catch块的执行顺序
如果在捕捉异常的过程中,若有多个catch块,按照从上到下的顺序执行catch块;
若有一个catch块被执行,其他catch就不会被执行;finally总是会被执行。
小结
抛异常和捕获异常的区别:
1)捕获异常:当前行为发生异常之后,能够寻求替代方案,继续完成当前的行为。
2)抛异常:当行为发生异常之后,在当前行为中,无法寻找替代方案,需要将异常抛出。
产生异常
1)语法
throw new 异常类名();
注:
1))有很多的异常在API中已产生
1))根据异常采取的处理方式
a) try{
//代码块
}catch(异常类型 变量名){
}catch(异常类型 变量名){
}finally{
}
b)抛异常:在方法定义中声明throws异常类名。
补充:发生异常,代码以后的执行顺序。
1)如果使用try{}catch 方式处理异常,当前代码位于try块中;如果当前代码发生了异常后,在try块且位于当前代码之后的代码不会被执行,直接进入catch块中;执行完catch块,继续执行后面的代码。
2)若使用throws处理异常时,当前代码在执行过程中发生异常之后,位于当前代码以后的所有语句都将不会被执行。
例子
<script src="https://code.csdn.net/snippets/274731.js" type="text/javascript"></script>
异常分类
自定义的异常
目的:
能够给用户提供更准确的提示信息,改善用户体验。
1)如何自定义异常
1))需要继承异常父类(Exception或RuntimeException)
2))提供对应的构造器
3))在对应的构造器调用父类对应的构造器
2))自定义异常示例:
<script src="https://code.csdn.net/snippets/274898.js" type="text/javascript"></script>
总结
1.异常的选择:
跟内存有关的异常,通常使用运行时异常;
跟内存以外有关的异常,通常使用编译时异常。
2编译时异常与运行时异常的语法检查区别
1).编译时异常
.编译时异常,如果没有产生异常,就不能去捕捉。在IDE中,如果产生捕捉时将提示如此信息:
Unreachable catch block for ActivationException. This exception is never thrown from the try statement body。
示例图片:
2).运行时异常
1))运行时异常,可以在没产生异常时,在代码中可以进行捕获。
2))因为运行时异常不参与语法检查;
3))运行时异常无论在代码中产生异常或者处理异常都可通过语法检查。
3。编译时异常的javac过程的语法检查步骤:
1)检查代码中是否有异常产生
2)检查异常是否被处理。
注:
以上两步缺一不可,如果缺失就会提示语法错误。