文章目录
异常概念的介绍
异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”(开发过程中的语法错误和逻辑错误不是异常)
异常的体系结构
Java程序在执行过程中所发生的异常可分为两类:
- Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性的代码进行处理。
- Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:空指针访问、试图读取不存在的文件、网络连接中断、数组角标越界等
异常的处理
我们这里说的异常处理,是指Exception,狭义上的异常。只有Exception,才能让我们使用针对性的代码进行处理,所以特别讨论Exception。如果是Error,是一些严重的错误,不可使用针对性的代码进行处理。
对于编译时的异常,我们必须要进行处理,否则编译就无法通过。运行时异常,我们可以不进行处理,一旦发现运行时异常,我们应该需要修改我们的代码。
Java中对于异常的处理,有两种方式:1.try-catch-finally ; 2.throws
try-catch-finally的使用
格式:
try{
//可能出现异常的代码
}
catch(异常类型1 变量1){
//处理异常的方式1
}
catch(异常类型2 变量2){
//处理异常的方式2
}
...
finally{
//一定会执行的代码
}
说明:
- fianlly是可选的
- 使用try将可能出现异常的代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配
- 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理,就跳出当前的try-catch结构(在没有写finally的情况)。继续执行其后的代码
- catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓;catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错
- 在try-catch-finally结构内声明的变量,出了此try-catch-finally结构不能调用
- try-catch-finally结构可以嵌套
- finally中声明的是一定会被执行的代码
throws
"throws + 异常类型"写在方法的声明处。指名此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出。异常代码后续的代码,就不再执行
注意:try-catch-finally:真正的将异常处理掉了;throws的方式只是将异常抛给了方法的调用者。并没有真正的将异常处理掉
手动抛出异常
用throw手动抛出异常(必须抛出一个异常类的对象)
自定义异常类
- 如何自定义异常类
- 继承与现有的异常结构:RuntimeException、Execption
- 提供全局常量:serialVersionUID
- 提供重载的构造器