一、概念

  • 异常是指程序运行中出现的不期而至的各种状况,如:文件找不到,网络连接失败,非法参数等
  • 异常发生在程序运行期间,影响正常的程序执行流程。
  • 分为三大类:
  1. 检查性异常;
  2. 运行时异常;
  3. 错误ERROR:错误不是异常,是脱离程序员控制的问题,在代码中通常被忽视。如:栈溢出。
  • 异常处理框架
  1. Java将异常当对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。
  2. Java API已定义许多异常类,通常分为:错误ERROR,异常EXCEPTION。
  • Error对象类由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
  • Exception有个重要子类RuntimeException(运行时异常)
  1. 数组下标越界;
  2. 空指针;
  3. 算数异常;
  4. 丢失资源;
  5. 找不到类异常。
  • Error与Exception的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些时,Java虚拟机JVM一般会选择终止线程;
    Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能地去处理这些异常。

二、异常处理机制

  • 抛出异常
  • 捕获异常
  • 异常处理五个关键字:try,catch,finally,throw,throws.
public static void main(String[] args) {

        int a =0;
        int b =1;
        try {
            new Test().test(a,b);
        } catch (ArithmeticException e) {
            throw new RuntimeException(e);
        }

        //ctrl+alt+t快捷键:选择包裹体


        //try..catch..   ,可以不要finally,
        //假设要捕获多个异常:异常类型要从小到大,否则报错。
        try{
            //System.out.println(b/a);
            new Demo1().a();
        }catch(ArithmeticException e){ //catch(想要捕获的异常类型) 捕获异常;
            System.out.println("程序出现异常"+e);
        }catch(Error e){
            System.out.println("ERROR");
        }catch(Throwable e){
            System.out.println("Throwable异常");
        }

        finally { //finally处理善后工作,比如关闭某些资源
            System.out.println("finally");
        }
    }

    public void a(){
        b();
    }
    public void b(){
        a();
    }

    //方法头内用throws抛出异常
    public void test(int a,int b) throws ArithmeticException{

        if (a==0) {
            throw new ArithmeticException();//主动抛出异常,一般在方法中使用
        }else{
            System.out.println(b/a);
        }

    }

三、实际应用中的经验总结

  • 处理运行时异常时,设计逻辑去合理规避,同时辅助try~catch处理;
  • 多重catch块后面,可以加一个catch(Exception)来处理可能被遗漏的异常;
  • 对于不确定的代码, 也可以加上助try~catch处理潜在的异常;
  • 尽量去处理异常;
  • 具体如何处理异常,根据不同业务和异常类型决定;
  • 尽量添加finally语句去释放占用的资源。IOScanner