JAVA小白的崛起之路(四)异常机制
异常
概念:异常(Exception) 即例外,程序没有按自己预想的结果运行出来,出现了非正常情 况,即“程序得病了”
Java异常类是Java提供的用于处理程序中错误的一种机制。设计良好的程序应该在 异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或发生 不可预见的结果。
Java程序的执行过程中如出现例外事件,可以生成一个异常类对象,该异常对象封 装了例外事件的信息并将被提交给Java运行时系统,这个过程称为抛出( throw )异 常。
当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常 对象交给其处理,这一过程称为捕获(catch)异常。
分类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g7Kqe7Vf-1604930576036)((四)]异常机制.assets/FB63{D_C_JRAKGRGHF@YWJA.png)
Exception:所有异常的父类,其子类对应了各种各样可能出现的异常事件,一般需 要用户显示地声明或捕获。
Runtime Exception
Runtime Exception类是 Exception 类的子类,叫做运行时异常,Java 中的所有运行 时异常都会直接或者间接地继承自 RuntimeException 类。
CheckedException(需要处理的)
Java 中凡是继承自 Exception,而不继承自 RuntimeException 类的异常都是非运行 时异常,也叫检查时异常。
处理异常
对于编译(非运行)时异常( checked exception ),必须要对其进行处理,否则无 法通过编译。处理方式有两种:
- 异常捕获
- 异常抛出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-92yCzkrE-1604930576042)((四)]异常机制.assets/A%8ZNIU65GK
19F]Y`XJ0H.png)
- try代码段包含可能产生例外的代码
- try代码段后跟有一个或多个catch代码段
- 每个catch代码段声明其能处理的一种特定类型的异常,进行捕获并提供处 理的方法
- 当异常发生时,程序会中止当前的流程,根据获取异常的类型去执行相应 的catch代码段
- 一个 try 后面可以跟多个 catch,但不管多少个, 最多只会有一个catch 块被 执行。
- catch捕获异常需要从小到大捕获(先子类再父类)
- finally段的代码无论是否发生异常都有执行
自定义异常
步骤
使用自定义异常一般有如下步骤:
- 通过继承java.lang.Exception类声明自己的异常类
- 在方法适当的位置生成自定义异常的实例,并用throw语句抛出
- 在方法声明部分用throws语句声明该方法可能抛出的异常
public class RegisterException extends RuntimeException{
public RegisterException(){
super();
}
public RegisterException(String message){
super(message);
}
}
Exception: 所有异常的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显示地声明或捕获。
自己编写异常代码:
/**
* 我自己的异常,自定义的一个检查时异常
* "我错了"
*1、有了异常类
* 2、找一个适当的时机出现异常
* 3、抛出
*/
public class MyException extends Exception{
public MyException(String message){
super(message);
}
}
public class ExceptionDemo004 {
public static void main(String[] args)throws MyException {
try{
testException("我错了");
System.out.println("try当中异常后面的代码");
}catch (MyException e){
System.out.println("出异常了");
System.out.println(e.getMessage());
}finally {
System.out.println("不管有没有异常都会执行的代码");
}
// testException("我错了");
System.out.println("处理之后的代码");
}
public static void testException(String msg)throws MyException{
if("我错了".equals(msg)){
// 出异常的地方法
throw new MyException("出现了敏感词汇");
}
System.out.println("正常代码");
}
}
throw new MyException("出现了敏感词汇");
}
System.out.println("正常代码");
}
}