异常处理基础知识

这里写图片描述

异常的概述;异常(Exception)是程序在执行过程中所产生的问题。
异常的分类;1) 检查异常:检查异常通常是用户错误或者编译时错误。
2) 运行时异常:运行时异常是一个程序在运行过程中可能发生的、可以被程序员 ‘ 避免的异常类型
3) 错误:实际上,错误根本不是异常,但却是用户或程序员所无法控制的问题。

异常的控制流程;1) 捕获这个异常,不让它沿着调用栈继续向下抛出。
2) 捕获这个异常,并继续向下抛出。
3) 不捕获这个异常,从而导致方法从调用栈中被弹出,异常对象继续抛给 ‘ 调 用栈下面的方法。
不论调用栈中有多少方法,程序控制流程都将继续在调用栈中向下执行。在调用栈中的每一个方法要么捕获并处理这个异常,要么捕获这个异常并再次抛出,或者什么都不做让异常进入下一个方法。
编译时异常的解决方案;要么直接异常处理,要么就给方法的调用者进行“异常声明”
运行时异常的解决方案;不需要异常处理,也不需要“异常声明”让它报错,报错以后,程序员再通过“条件控制语句”对其进行控制即可。
当一个方法中,可能抛出不计数的异常个数,两种解决方案,1.定义多个catch块,分别进行代码的监控;2.在catch块的参数类型定义时,直接定义上层父类,采用动态多态的方式来解决问题。

异常声明定义:参与到同一个事物的业务方法,为了保证事物的完整性不能自己抓捕异常,让控制事物的外部方法必须整体管理。
异常声明运用场景;方法异常的声明,通常用于编译时异常,而运行时异常,不需要
当方法的调用者,需要知道调用方法本身的具体执行情况时,而并非是“成没成功,失没失败”时,我们就有必要针对“调用方法”进行异常声明。
在方法异常声明的时候,如果遇到子异常和父异常,都可能抛出的情况,建议声明父异常,原因是父异常可以自动向上转型。

Thowable类;异常有三种不同的类型,但它们都拥有一个公共的父类:java.lang.Throwable。只有Throwable类型的对象能够被JVM抛出。Throwable类有两个子类:Exception和Error。
tion类是所有异常的父类,包括运行时异常和检查异常。
在这种继承层次关系中,运行时异常和检查异常根据适合的不同情况作出了进一步的区分。如果一个类是RuntimeException类的子类,那么这个子类代表了一个运行时异常。如果一个类是Exception的子类,但并不是RuntimeException的子类,那么这个类就是一个检查异常。(更详细的方法描述可以参考Java API文档)。

捕获异常;在Java语言中,我们通常在一个方法中使用try和catch关键字来捕获异常。使用try/catch关键字的代码块把可能产生异常的代码“包围起来”,其中的代码也被称为“被保护的代码”。
catch语句包含我们想要捕获的异常的类型声明。如果在“被保护的代码”中发生异常,try块后面的catch块就会尝试对这个异常进行检查。如果发生的异常类型是在catch语句中所罗列出来的,那么异常对象就像方法的参数一样传递给catch块中。
在单个try块后可以有任意多个catch块。如果在“被保护的代码”中有异常产生,那么这个异常就会抛给下面的第一个catch块。如果抛出的这个异常的数据类型匹配ExceptionType1,那么异常将在这里被捕获。如果不匹配,异常将继续向下传递给第二个catch块。这种情况将持续下去,直到异常被捕获或者通过所有的catch块。在这种情况下,目前的方法停止执行,并且异常向下抛出到调用栈前面的方法中。

finally关键字;关键字finally用于在try块后创建一个代码块。finally代码块总是会执行,不管异常是否发生。我们可以使用finally块来执行清理类型的语句,而不管被保护的代码中发生了什么。finally块出现在catch块的末尾。 
    如果发生了IOException异常,那么catch块就要执行,并且到达return语句。在方法返回之前,finally块将会执行。
 捕获异常有这几种搭配;1,单个catch块;try,catch。
                      多个catch块;try,catch,catch····。
                      单个catch加finally;try,catch,finally。
                      多个catch块加finally;try,catch,catch····,finally。

用户自定义异常;
在编写自定义异常类时,必须牢记如下几点:
 所有的异常必须是Throwable的子类。
 如果我们想编写一个可以自动被异常处理或声明规则强制的检查异常,就需要继承Exception类。
 如果想编写一个运行时异常,就需要继承RuntimeException类。

猜你喜欢

转载自blog.csdn.net/qq_43039291/article/details/82703428