java异常处理(1) 异常捕获代码实例和常见的异常捕获种类

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

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

  2. java中异常捕获和处理可以用try..catch代码块来实现,把可能发生异常的代码放在try中,一单代码发生异常,系统就会跑出一个异常对象,并且把这个异常对象交由catch代码块来处理。

  3. 应该注意的细节:

    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块来捕获一种以上的异常,使用方法是在两个异常类名之间加 | 来分割

    5. 以下为上述知识点的代码示例

      //需要注意的是,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讲义》后总结出来的。

你可能感兴趣的:(java)