1. 异常捕获,其本质就是程序员希望有一个if...else代码块,可以将影响程序运行的情况包括进去:
if(发生了影响程序运行的事件){
    执行处理该事件的应对方法
}else{
    程序正常运行
}

由此,我们就可以有对异常捕获的基本认识

  1. java中异常捕获和处理可以用try..catch代码块来实现,把可能发生异常的代码放在try中,一单代码发生异常,系统就会跑出一个异常对象,并且把这个异常对象交由catch代码块来处理。
  2. 应该注意的细节:
  1. 无论是try还是catch代码块,其花括号{}在任何情况下都是不可省略的,这一和if不同,if在执行的代码只有一行的时候可以省略花括号,try和catch不行
  2. 在try中声明的变量,只有在try代码块中才可以使用,在catch中是不可以使用的。
  3. 一个try可以对应多个catch,系统会根据抛出来的异常一次匹配这些异常,直到怕匹配到抛出的异常种类和catch的异常种类相同或者抛出的异常是catch的异常的子类异常时停下,并执行对应的catch的代码逻辑
  4. 常用的异常捕获种类有:
  1. IndexOutOfBoundsException:数组越界异常,java运行时将调用(比如说声明了长度为2的数组a,却使用了a[2]的时候)
  2. NumberFormatException:数字格式异常,当输入的是字母而不是一个数字的时候调用
  3. ArithmeticException:算术异常,当分母为零的时候调用
  4. NullPointException:空指针异常,当视图调用一个bull对象的实例方法或者实例变量的时候调用
  5. 在java7之后,可以使用一个catch块来捕获一种以上的异常,使用方法是在两个异常类名之间加 | 来分割
  1. 以下为上述知识点的代码示例
//需要注意的是,try和catch的{}是不能省略的,即使花括号里面只有一行代码
//还有,try中声明的变量只有在try中可以使用,在catch是不可以使用的
package KnowIt;

import java.rmi.server.ExportException;
import java.util.EmptyStackException;

public class SimpleExample {
    public static void main(String args[]){
        int a[] = new int[2];
        a[0] = 1;
        try {
            int test = 12;
            a[2] = 9;
        }catch (NumberFormatException | IndexOutOfBoundsException e1){
//          这个异常是当输入的参数不是数字,而是字母的时候调用(也就是需要一个数字,却输入了一个字母)

//            test = 1;
//            这一句是会报错的,因为catch无法访问try声明的变量
            System.out.println("数字格式异常或者数组越界异常");
        }catch (ArithmeticException e2){
//            这个异常是当分母为零的时候调用
            System.out.println("算术异常");
        }catch (EmptyStackException e3){
//            这个异常是当数组越界的时候调用
//            System.out.println("数组越界异常");
//            程序最终输出数组越界异常,说明java是依次匹配各个捕获的异常,知道找到类型匹配的异常就
//            停下
        }catch (Exception e4){
//            所有异常的父类
            System.out.println("异常");
        }
    }



}
//输出结果为
//        数字格式异常或者数组越界异常
//空指针异常发生在视图调用一个null对象的实例方法或者实例变量的时候
package KnowIt;

import java.util.Date;

public class NullPointException {
    public static void main(String args[]){
        Date d = null;
        try{
            System.out.println(d.after(new Date()));
        }catch (NullPointerException ne){
            System.out.println("空指针异常");
        }catch (Exception e){
            System.out.println("未知异常");
        }
    }
}

这是我看李刚编著的《疯狂Java讲义》后总结出来的。