异常
分类
Error
-
Java虚拟机无法解决的严重问题
- 没办法编写针对性的代码进行处理
Exception
-
其他因编程错误或偶然的外在因素导致的一般性问题。
- 可以针对性的代码进行处理
-
分类
-
编译时异常-受检异常
- IOException
- ClassNotFoundException
-
运行时异常-非受检异常
- NullPointerException
- ArrayIndexOutofBoundsException
- ClassCastException
- NUmberFormatException
-
处理方式
抓抛模型
-
抛
-
程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象
- 关于异常对象的产生:1、系统自动生成的异常对象 2、手动生成一个异常对象,并抛出(throw)
-
并将此对象抛出
-
一旦抛出对象后,其后的代码不再执行。
-
-
抓:异常处理方式
-
try-catch-finally
-
结构
-
结构图
- try-catch-finally是可以嵌套的
-
-
说明
-
finally
- finally是可选的
- 代码一定会被执行
- 一般像数据库连接、输入输出流、网络编程等资源,进行资源关闭的代码写在finally中
-
使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配。
-
一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出当前的try-catch结构(在没写finally的情况),继续执行其后的代码
-
catch中的异常类型如果没子父类关系,则谁声明在上,谁声明在下无所谓。
catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错
-
-
异常对象处理的方式
- getMessage()–返回string
- printStackTrace()
-
什么时候写?
- 对于运行时异常不用异常处理,但针对编译时异常,要进行异常处理。
-
-
throws+异常处理类型
- 写在方法的声明处,指明此方法在执行时可能会抛出的异常类型
- 一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出。异常代码后续的代码,就不再执行!
-
自定义异常类
继承于现有的异常结构:RuntimeException 、Exception
提供全局常量(static final):serialVersionUID
提供重载的构造器
- 空参
- 形参为message
throw和throws区别
throw表示抛出一个异常类的对象,是在异常对象产生的过程中。声明在方法体内
throws是处理异常的一种方法,声明在方法的声明处
手动抛出异常
抛出异常一般为Exception、RunTimeException
- 在方法体内声明:throw new Exception(“*****”);
然后在方体声明处throws Exception
两种处理方式体会
try-catch-finally
- 真正将异常给处理掉了
throws+异常处理
- 只是将异常抛给了方法的调用者。并没真正将异常处理掉
选择方式
- 如果父类中被重写的方法没throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中异常,必须使用try-catch-finally方式处理。
- 执行的方法a中,先后又调用了另外的几个方法,这几个方法是递进关系执行的。我们建议这几个方法使用throws的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。