小白学java第27天
异常处理:当异常发生时,对异常处理的方式
方式:
1.try-catch-finally :程序员在代码中捕获发生的异常,自行处理
try{
代码可能有异常}catch(Exception e){
//捕获到异常
//1.当异常发生时
//2系统将异常封装成Exception 对象 e,传递给catch
//3.得到异常对象后程序员自己处理
//4注意:如果没有发生异常catch代码块不执行}finally{
//不管try代码是否有异常发生,始终要执行finally
//如果没有finally语法也通过}
注意:
(1)如果异常发生了,异常后边的代码不会执行,直接进入到catch块
(2)如果异常没有发生,则顺序执行try的代码块,不会进入到catch
(3)如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源),则使用finally
(4)如果偶多个catch语句,捕获不同的异常(进行不同的业务处理),要求子类异常写在前面,父类异常写在后面
(5)可以进行tey-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉(应用场景:执行一段代码不管是否发生异常都必须执行某个业务逻辑)
2.throws : 将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理着就是JVM
(引用的别人的流程图)
使用:
(1)如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
(2)在方法生命中使用throws可以声明抛出异常的列表
(3)使用throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
(4)throws关键字后也可以是异常列表。即抛出多个异常
注意:
(1)对于编译异常,程序必须处理,比如try-catch或throws
(2)对于运行时异常,如果程序没有处理,默认是throws的方式处理
(3)子类重写父类方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类的抛出的异常一致,要么为父类 跑出的异常的类型的子类型
(4)在throws的过程中,如果有方法try-catch就相当于异常处理,就可以不用throws
自定义异常:程序中出现错误,而这种错误没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息
步骤:
1.定义类:自定义异常类名继承Exception或RuntimeException
2.如果继承Exception,属于编译异常
3.如果继承RuntimeException,属于运行异常(这也是一般情况)
throws和throw的区别:
意义 | 位置 | 后面跟的东西 | |
throws | 异常处理的一种方式 | 方法声明处 | 异常类型 |
throw | 手动生成异常对象的关键字 | 方法体中 | 异常对象 |