2021-08-04

异常方法
下面的列表是 Throwable 类的主要方法:

1 public String getMessage()

返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。


2 public Throwable getCause()

返回一个Throwable 对象代表异常原因。


3 public String toString()

使用getMessage()的结果返回类的串级名字。


4 public void printStackTrace()

打印toString()结果和栈层次到System.err,即错误输出流。

 

5 public StackTraceElement [] getStackTrace()

返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。

 

6 public Throwable fillInStackTrace()

用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。

 

三、异常的使用及执行流程

1、异常的处理方案

try...catch、try...catch...finally、try...finally


try{
可能会发生的异常
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}...
[finally{
释放资源代码;
}]

 

注意:

catch 不能独立于 try 存在。

catch里面不能没有内容

在 try/catch 后面添加 finally 块并非强制性要求的。

try 代码后不能既没 catch 块也没 finally 块。

try里面越少越好。

try, catch, finally 块之间不能添加任何代码。

finally里面的代码最终一定会执行(除了JVM退出)

如果程序可能存在多个异常,需要多个catch进行捕获。

异常如果是同级关系,catch谁前谁后没有关系

如果异常之间存在上下级关系,上级需要放在后面


2、异常的执行流程


Day25---学习Java第二弹_执行流程

 

Error与Exception的区别:

Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。

一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足方法调用栈溢等。

对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。

 

Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

在catch捕获异常时,为什么不考虑使用Throwable类型,而只是使用Exception来进行接收?

Throwable表示的范围要比Exception大。实际上程序使用Throwable来进行处理,没有任何语法问题,

但是却会存在逻辑问题。因为此时出现的(或者说用户能够处理的)只有Exception类型,而如果使用Throwable接收,

还会表示可以处理Error的错误,而用户是处理不了Error错误的,所以在开发中用户可以处理的异常都要求以Exception类为主。

 

异常是一起处理好还是分开处理好?

根据实际的开发要求是否严格来决定。在实际的项目开发项目工作中,所有的异常是统一使用Exception处理还是分开处理,

完全根据开发者的项目开发标准来决定。如果项目开发环境严谨,基本上要求针对每一种异常分别进行处理,

并且要详细记录下异常产生的时间以及产生的位置,这样可以方便程序维护人员进行代码的维护。

再次注意:处理多个异常时,捕获范围小的异常要放在捕获范围大的异常之前处理。

 

throw和throws的区别?

throw和throws都是在异常处理中使用的关键字,区别如下:

throw:指的是在方法中人为抛出一个异常对象(这个异常对象可能是自己实例化或者抛出已存在的);

throws:在方法的声明上使用,表示此方法在调用时必须处理异常。

 

检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)区别?

所有的检查性异常都继承自java.lang.Exception;

所有的非检查性异常都继承自java.lang.RuntimeEx ception。

检查性异常和非检查性异常最主要的区别在于其处理异常的方式:检查性异常必须使用try catch或者throws等关键字进行处理,

否则编译器会报错;非检查性异常一般是程序代码写的不够严谨而导致的问题,可以通过修改代码来规避。

常见的运行时异常:空指针异常(NullPointerException)、除零异常(ArithmeticException)、数组越界异常(ArrayIndexOutOfBoundsException)等;

常见的检查性异常:输入输出异常(IOException)、文件不存在异常(FileNotFoundException)、SQL语句异常(SQLException)等。


assert关键字(了解)

在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,

Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都 将忽略!),如果要开启断言检查,则需要用开关-enableassertions或-ea来开启。

assert关键字语法很简单,有两种用法:

assert <boolean表达式>

如果<boolean表达式>为true,则程序继续执行。

如果为false,则程序抛出AssertionError,并终止执行。

assert <boolean表达式> : <错误信息表达式>

如果<boolean表达式>为true,则程序继续执行。

如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。

 例:

1 public class Test {
2     public static void main(String[] args) {
3         int a = 10;
4         int b = 2;
5         assert a == 10:"a不等于10";
6         System.out.println("a="+a);
7     }
8 }

 

 Day25---学习Java第二弹_项目开发_02

 

 例:

1 public class Test {
2     public static void main(String[] args) {
3         int a = 10;
4         int b = 2;
5         assert a == 20:"a不等于20";
6         System.out.println("a="+a);
7     }
8 }