15_异常处理

百知教育 - 孙帅 - 15_异常处理

01_异常的概念和分类

  • 异常的分类
    • Throwable 异常的父类
      • Error 错误 严重 不可避免 不可处理
      • Exception 异常 可以处理
        • RuntimeException子类 未检查异常 可以避免 可处理可不处理
        • 非RuntimeException子类,包括Exception 已检查异常 不可避免 必须处理

02_异常的产生和传递

  • 异常的产生
    • throw 异常对象,即抛出一个异常
    • 例如:throw new NullPointerException() 抛出空指针异常
  • 异常的传递
    • 沿着 方法调用链反向传递

03_声明抛出异常

  • 常见异常:
    • EOFExceptionFileNotFoundExceptionIOException的子类
  • 异常的处理
    1. 声明抛出 throws
    2. 谁调用谁处理
  • 代码:
    package day18;
    import java.io.EOFException;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.lang.Throwable;
    import java.lang.Exception;
    public class TestException{
     public static void main(String[] args) throws Throwable{
      System.out.println("main 1");
      ma(0);
      System.out.println("main 2");
     }
     static void ma(int i) throws Exception{
      System.out.println("ma 1");
      mb(i);
      System.out.println("ma 2");
      System.out.println("ma 3");
     }
     static void mb(int i) throws IOException, BZException{
      System.out.println("mb 1");
      mc(i);
      System.out.println("mb 2");
     }
     static void mc(int i) throws EOFException, FileNotFoundException, BZException{
      System.out.println("mc 1");
      if(i == 0) throw new NullPointerException();
      if(i == 1) throw new EOFException();
      if(i == 2) throw new FileNotFoundException();
      if(i == 3) throw new BZException();
      System.out.println("mc 2");
      System.out.println("mc 3");
     }
    }
    class BZException extends Exception{ 
    }
  • 运行结果:
    在这里插入图片描述

04_捕获异常

  • try-catch
    • 当有多个catch时,先写catch子类异常,再写catch父类异常
  • 异常的方法
    • printStackTrace(): 打印异常 栈追踪信息
    • getMessage(): 返回异常信息
  • 代码:
    package day18;
    import java.io.EOFException;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.lang.Throwable;
    import java.lang.Exception;
    public class TestException{
     public static void main(String[] args){
      System.out.println("main 1");
      ma(0);
      System.out.println("main 2");
     }
     static void ma(int i){
      try{
       System.out.println("ma 1");
       mb(i);
       System.out.println("ma 2");
      }
      catch(IOException e){
       System.out.println("Catch IOException");
      }
      catch(BZException e){
       System.out.println("Catch BZException");
      }
      catch(Exception e){
       //System.out.println("Catch Exception"+e.getMessage());
       e.printStackTrace();
      }
      System.out.println("ma 3");
     }
     static void mb(int i) throws IOException, BZException{
      System.out.println("mb 1");
      mc(i);
      System.out.println("mb 2");
     }
     static void mc(int i) throws EOFException, FileNotFoundException, BZException{
      System.out.println("mc 1");
      if(i == 0) throw new NullPointerException("空指针异常");
      if(i == 1) throw new EOFException("文件意外终止");
      if(i == 2) throw new FileNotFoundException("文件没找到");
      if(i == 3) throw new BZException("我自己定义的异常");
      System.out.println("mc 2");
      System.out.println("mc 3");
     }
    }
    class BZException extends Exception{
     public BZException(){}
     public BZException(String message){
      super(message);
     }
    }
  • 运行结果:
    在这里插入图片描述

05_finally

  • try-catch-finally
    • finally: 无论如何都会执行通常用来释放资源
  • try-finally
  • System.exit(0)
    强制退出
  • 代码:
    package day18;
    public class TestFinally{
     public static void main(String[] args){
      System.out.println(fn(2));
      System.out.println(fn(0));
     }
     static int fn(int a){
      try{
       //System.exit(0);
       int b = 6/a;
       return b;
      }
      catch(Exception e){
       return 0;
      }
      finally{
       System.out.println("hehe");
       //return 2;
      }
     }
    }
  • 运行结果:
    在这里插入图片描述

06_finally改变变量值

  • 代码:
    package day18;
    public class TestFinally2{
     public static void main(String[] args){
      System.out.println(fn());
     }
     static int fn(){
      int a = 10;
      try{
       a = 20;
       return a;
      }
      finally{
       a = 30;
      }
     }
    }
  • 运行结果:
    在这里插入图片描述

07_方法覆盖对抛出异常的要求

  • 方法覆盖:
    子类方法不能抛出一个父类方法没有抛出的异常,即子类方法抛出的异常必须是父类方法抛出异常的 同类子类 或者是 不抛
  • 代码(编译通过):
    package day18;
    import java.io.*;
    import java.sql.SQLException;
    public class TestOverrideException{
     public static void main(String[] args){
      Super s = new Sub();
      try{
       s.method();
      }
      catch(IOException e){
       
      }
     }
    }
    class Super{
     public void method() throws IOException{}
    }
    class Sub extends Super{
     @Override
     public void method() throws FileNotFoundException, EOFException{}
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值