动力节点——day07

2023-02-26,,

什么是异常?

异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
Java中异常的存在形式?
异常在java中以类的形式存在,每一个异常类都可以创建异常对象
异常的继承结构图

编译时异常和运行时异常,都是发生在运行阶段,编译阶段异常不会发生,编译时异常因为什么而得名?

因为编译时异常需要在编译阶段预先处理,如果不处理编译器报错,因此而得名,所有异常都是在运行阶段发生的,因为只有程序运行阶段才可以new对象,因为异常的发生就是new异常对象
编译时异常一般发生的概率较高:出门可能会下雨,所以要带一把伞不然会发生生病异常
运行时异常一般发生的概率较低:出门可能被石头砸到,要带个头盔
编译时异常又被称为受检异常或受控异常。运行时异常又被称为未受检异常或非受控异常。
Java语言中对异常的处理有两种方式:
第一种方式:在方法声明的位置上,使用throws关键字(异常上抛)
第二种方式:使用try-catch进行异常的捕捉(异常捕捉)
注意:异常发生之后,如果一直上抛,最后抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果,终止Java程序的执行
如果对异常进行处理,后面代码还会继续执行 如果把异常直接抛出,后面代码将不会在继续执行,如果写在try语句块中,出现异常,异常后面的代码不会执行
throw是手动抛出一个异常,throws是方法抛出一个异常
在方法上抛出一个异常时,只有在子类执行失败从而创建出一个异常对象才会执行,或者在方法中直接抛出一个异常对象。如果执行正确则不会产生异常对象,从而也不会抛出异常
深入try...catch
catch后面的小括号的类型可以是具体的异常类型,也可以是异常类型的父类型
catch写多个的时候,建议catch 的时候,精确的一个一个处理,这样有利于程序的调试
catch可以写多个,但是顺序必须按照从上到下,从小到大排列原则
JDK8的新特性,可以将多个异常通过逻辑或写在一个catch中
异常对象有两个非常重要的方法:
获取异常简单的描述信息

String msg=exception.getMessage();
打印异常追踪的堆栈信息
exception.printStackTrace();
关于try中的finally子句
在finally子句中的代码是最后执行的,并且是一定执行的,即使try语句中的代码出现了异常。
finally子句必须和try一起出现,不能单独编写
finally子句通常使用在那些情况
通常在finally语句块中完成资源的释放/关闭
因为finally中的代码比较有保障
即使try语句块中的代码出现异常,finally中的代码也会正常执行
try和finally,没有catch可以吗?
try不能单独使用
try和finally可以联合使用
有三种情况:try-catch、try-catch-finally、try-finally
当java程序在执行try块、catch块时如果遇到了return或者throw时,这两个语句都会导致该方法立即结束,但是系统在执行这两个语句时并不会结束该方法,而是去寻找该异常处理流中是否包含了finally语句块,如果没有finally块,则程序会立即执行return或者throw语句,方法终止。如果有finally语句块,系统会开始立即执行finally语句块,只有当finally语句块中的代码被执行完了之后,系统才会回来再次执行try块或者catch块中的return或throw语句,但是如果finally块中也有return或者throw这样能是方法结束的语句,则finally块就会立即结束该方法,系统将不会跳回去执行try块或者catch中的任何语句。
异常也可以自己编写,编译时异常要继承Exception(如果事件发生概率较高),运行时异常要继承RuntimeException(如果事件发生概率较低)
在进行方法的覆盖时,访问权限修饰符只能更高,抛出异常只能更少
类在强制转换过程中,如果是类转换成接口类型,那么类和接口之间不需要存在继承关系,也可以转换。

动力节点——day07的相关教程结束。

《动力节点——day07.doc》

下载本文的Word格式文档,以方便收藏与打印。