异常

一、基本介绍

二、运行时异常

三、编译时异常

四、 异常处理机制

  1. 对于运行时异常,如果程序员没有显式处理异常,默认throws的处理;
  2. 对于编译异常,程序中必须处理,比如try-catch 或 throws;

五、 try-catch 异常处理

六、 throws 异常处理

  1. 对于运行时异常,如果程序员没有显式处理异常,默认throws的处理;
  2. 子类重写父类方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致。要么为父类抛出异常类型的子类型
  3. 在throws 过程中,如果有方法 try-catch,就相当于处理异常,就可以不必throws
  import java.io.FileInputStream;
  import java.io.FileNotFoundException;
  /**
   * @author
   * @version 1.0
   */
  public class ThrowsDetail {
      public static void main(String[] args) {
          f2();
      }
      public static void f2()/* throws ArithmeticException*/{
          //1. 对于编译异常,程序中必须处理,比如try-catch 或 throws
          //2. 对于运行时异常,程序中如果没有处理,默认就是throws的处理
          int n1 = 10;
          int n2 = 0;
          double res = n1/n2;
      }
      public static void f1() throws FileNotFoundException{
          //如果无 throws FileNotFoundException,则f3()调用报错
          //f3()方法将编译异常抛给了调用者f1()
          //编译异常必须处理,运行异常默认上抛
          //这时就要f1()必须处这个编译异常
          //在f1()中要么try-catch,要么继续上抛
          f3();
      }
      public static void f3() throws FileNotFoundException {
          FileInputStream fis = new FileInputStream("d://aa.txt");
      }
      public static void f4(){
          //这里调用没有问题
          //就算f5()有抛出的是运行异常
          //而Java中运行异常并不要求程序员显示处理,因为有默认处理机制,会自动继续上抛
          f5();
      }
      public static void f5() throws ArithmeticException{}
  }
  class Father{//父类
      public void method() throws RuntimeException{
      }
  }
  class Son extends Father{//子类
      //3. 子类重写父类方法时,对抛出异常的规定:子类重写的方法
      //所抛出的异常类型要么和父类抛出的异常一致。要么为父类抛出异常类型的子类型
      //4. 在throws 过程中,如果有方法 try-catch,就相当于处理异常,就可以不必throws
      @Override
      public void method() throws ArithmeticException {
      }
  }

七、 自定义异常

八、 throw 和 throws 的区别

意义 位置 后面跟的东西
throws 异常处理的一种方式 方法声明处 异常类型
throw 手动生成异常对象的关键字 方法体中 异常对象

发表回复