Java异常机制

异常机制Exception

什么是异常

  • 检查型异常:

  • 运行时异常:

    (1/0、ClassNotFound找不到类、NullPoint空指针、UnKnowType未知类型转换、下标越界异常)

  • 错误ERROE:由虚拟机生成并抛出,在应用程序的控制和处理能力之外

    (AWT、JVM虚拟机异常(StackOverFlow栈溢出、OutOfMemory内存溢出))

异常体系结构

Java把异常当作对象来处理

 

异常处理

  • 抛出异常

  • 捕获异常

  • 异常处理关键字:try、catch、finally、throw、throws

 1  //try,catch,finally
 2  public class Test {
 3      public static void main(String[] args) {
 4  5          int a = 10;
 6          int b = 0;
 7  8          try {   //try监控区域
 9              System.out.println(a/b);
10          }catch (ArithmeticException e){     //catch捕获异常 catch(要捕获的异常类型)
11              e.printStackTrace();            //可以有多个catch,但要注意异常由小到大捕获 
12          }finally{       //处理善后工作
13              System.out.println("end");
14          }
15          //finally可以不要,一般用于执行IO流、资源等的关闭操作
16          //idea快捷键:选中当前行->code->Surround with
17      }
18  }
19  //throw,throws
20  public class Test {
21      public static void main(String[] args) {
22          try {
23              new Test().test(1,0);
24          } catch (ArithmeticException e) {
25              e.printStackTrace();
26          }
27          //捕获异常后程序可以继续执行下去,不会因为异常而停止
28      }
29 30      //throws只是声明此方法可能抛出的异常,具体的抛出由throw进行
31      //如果方法内部已经捕获了异常,则不需要方法再抛出异常
32      public void test(int a,int b) throws ArithmeticException{
33          //System.out.println(a/b);
34          if (b == 1){
35              throw new ArithmeticException();    //主动抛出异常,一般在方法中使用
36          }
37      }
38  }

 

 

自定义异常

继承Exception类即可自定义异常

 1  //自定义异常类:继承Exception
 2  public class MyException extends Exception{
 3      //传入的参数
 4      private int detail;
 5      
 6      //异常类的构造器
 7      public MyException(int a){
 8          this.detail = a;
 9      }
10 11      //toString:异常的打印信息 (为什么这里要重载toString?)
12      @Override
13      public String toString() {
14          return "MyException{" + "detail=" + detail + '}';
15      }
16  }
17  ===========================================================
18  //测试程序    
19  public class Test {
20 21      //可能存在异常的方法
22      static void test(int a) throws MyException{
23          if(a>10) throw new MyException(a);
24          System.out.println("OK");
25      }
26 27      public static void main(String[] args) {
28          try {
29              test(11);
30          } catch (MyException e) {
31              //这里可以增加一些处理异常的代码
32              e.printStackTrace();
33          }
34      }
35  }

 

实际应用中的经验总结

  1. 处理运行异常时,采用逻辑合理规避,同时辅助try-catch处理

  2. 多重catch后可以加一个catch(Exception),处理可能被遗漏的异常

  3. 对于不确定的代码也可以用try-catch处理潜在的异常

  4. 尽量去处理异常,而不是简单的调用printStackTrace()打印输出

  5. 记得添加finally释放占用的资源

posted @ 2021-03-07 00:21  Colin13  阅读(26)  评论(0编辑  收藏  举报