6.1 异常概述与异常体系结构
-
异常:在Java语言中,将程序执行中发生的不正常情况称为异常
-
Java程序在执行过程中所发生的异常事件可分为两类:
-
Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源
耗尽等严重情况。比如:StackOverflowError 和 OOM。一般不编写针对性
的代码进行处理
-
Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使
用针对性的代码进行处理
-
6.2 异常处理机制一:try-catch-finally
- finally 是可选的
- finally 中声明的是一定会被执行的代码。即使 catch 中有出现异常,try 中有 return 语句,catch 中有 return 语句等情况
- 使用 try 将可能出现的异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个异常类的对象,根据此对象的类型,去 catch 中进行匹配
- 一旦 try 中的异常对象匹配到某一个 catch 时,就进行 catch 中进行异常的处理。一旦处理完成,就跳出当前的 try-catch 结构(在没有写 finally 的情况)。继续执行其后的代码
- catch 中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓
- catch 中的异常类型如果满足子父类关系,则要求子类一定要声明在父类上面
- 在 try 结构中声明的变量,在出了 try 结构以后,就不能再被调用
- 常见的异常对象处理的方式:
- String getMessage()
- printStackTrance()
用 try-catch-finally 处理编译时异常,使得程序在编译时就不再报错,但是运行时仍可能报错。相当于我们使用 try-catch-finally 将一个编译时可能出现的异常延迟到运行时出现
开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写 try-catch-finally了。针对编译时异常,我们一定要考虑异常的处理
public class ExceptionTest1 {
@Test
public void test1() {
//NumberFormatException
String str = "123";
str = "abc";
int num = 0;
try {
num = Integer.parseInt(str);
System.out.println("hello--1");
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
//e.printStackTrace();
//