异常的概念和处理

1、异常和错误

在Java程序的运行过程中,如果发生了意外事件(发生了错误或异常),则该意外会被封装成为一个对象,并把它提交给运行时的系统,寻求相应的代码来处理。意外事件在Java中分为两类,即错误和异常;而把这个意外对象的生成和提交过程,我们称之为抛出。

在Java中:

  ● 错误 - 不受控的,程序无法处理的

  ● 异常 - 容易排查的,可以处理的

2、异常的体系结构

Throwable 类是 Java 语言中所有错误或异常的超类。其两个子类:Error(错误)、Exception(异常)。

Error是程序无法处理的,比如OutOfMemoryError、ThreadDeath等,出现如此情况我们往往无能为力,只能交给JVM自行处理,大多数情况下,JVM会选择终止线程(真是简单粗暴...);而Exception就是程序可以处理的异常,也是我们重点要理解的部分。

3、异常的处理

3.1try catch

对于可能发生异常的代码,我们要使用 try 语句块来进行包裹,与 try 相呼应的还要有 catch 语句块。即 try 用来检测不安全的代码,用来发现异常,而 一旦某条语句出现了异常,则从此处中止,后面的代码不再执行,而是直接跳转到异常处理的代码块中,即提到的 catch 语句块。
 
所以:
  ● try 包括需要检测的代码
  ● catch 发生异常时进行捕获,并进行处理
 
3.2多个catch
catch 紧跟在 try 语句之后,也就是用来进行异常处理的部分,实际上 catch 可以写多个,分别用来捕获不同类型的异常,必须从小到大(即从子类到父类)的顺序进行捕获,否则会出现编译错误,某异常只被捕捉一次
 
 1     public static void main(String[] args) {
 2         Date date = null;
 3         int[] arr = new int[] { 0, 1, 2 };
 4         try {
 5             int i = arr[5];
 6             System.out.println(i);
 7             long time = date.getTime();
 8             System.out.println(time);
 9         } catch (NullPointerException e) {
10             System.out.println("空指针异常发生了,好像我应该做些什么");
11         } catch (IndexOutOfBoundsException e) {
12             System.out.println("数组越界了");
13         } catch (Exception e) {
14             System.out.println("发生了异常");
15         }
16     }

这个例子最后只会输出 "数组越界了",因为异常只被捕捉一次,且后面的代码不再执行。即使下面出现其他异常,也不会执行。

猜你喜欢

转载自www.cnblogs.com/fanyizhan/p/10017808.html