原创

JavaSE-异常

温馨提示:
本文最后更新于 2024年07月21日,已超过 272 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
  • 异常是什么?
    • 异常是指程序在运行时,不能正常的运行,出现了错误,这就是出现了异常。
  • 异常可分为哪几类?
    • 编译时异常:一般是指语法错误,可以通过编译器的提示加以修正。
    • 运行时异常:
      • 运行错误:如数组下标越界,除数为0等;
      • 逻辑错误:如年龄超过200岁,小于0岁等。
  • 产生异常后的反应:
    • 发生异常的部分产生系统定义的错误信息;
    • 程序意外终止,并将控制权返回操作系统;
    • 程序中所有分配的资源的状态保持不变,这样将会导致资源泄露。
    • 所以,我们必须对有可能产生的异常进行处理。
  • 异常处理机制

      try{
          可能发生异常的代码;
      }catch(异常类型 对象名){
          可能发生异常的代码;    
      }catch(异常类型 对象名){
          发生异常的处理方式;
      }finally{
    
      }
    
    • try块中放入可能会出现异常的代码

    • catch块负责捕获异常,catch可以使用多个,但是必须上面的放子类,下面放父类

    • finally块无论是否发生异常都会执行,一般用于关闭系统资源(关闭资源文件,关闭流)。

  • 异常的层级结构:

    err01.png

  • 思考题:

    class TestException{
        public static void main(String[] args){
              System.out.println("[main]:" + fun(5));//打印[main]:5  
        }
    
        public static int fun(int a){
            int s = 3;
            try{
                a = a/0;
                s++;
            }catch(Exception e){
                s = s+2;
                System.out.println("[catch]s=" + s);//打印[catch]s=5
                return s;
            }finally{
                s = s*2;
                System.out.println("[finally]s=" + s);//打印[finally]s=10
            }
            return s;
        }
    
    }
    
    • 控制台输出:
      打印[catch]s=5
      打印[finally]s=10
      打印[main]:5
      
  • throw 抛出去,抛弃,抛出单个异常,一般与if条件结合使用,表示遇到某种状况的时候抛出异常对象
  • throws 可以同时抛出多个异常,一般与方法结合使用,调用此方法要么try-catch处理,要么继续抛出,抛出的异常不能低于方法声明时的异常。
  • 如何自定义异常
    class AgeException extends RuntimeException{
        public AgeException(){
            super("年龄非法!年龄不能大于150岁,也不能小于0岁。");
        }
    }
    
正文到此结束