异常处理

java异常处理

  • 什么是异常

    ​ 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止。在Java中即,Java在编译或运行或者运行过程中出现的错误。

    Java中异常类可以分为两类:

    ​ 1、错误(Error):一般指与虚拟机相关的问题,如系统崩溃,虚拟机错误等等,这些错误无法恢复或捕获,将导致应用程序中 断。

    ​ 2、异常(Exception):因程序编码错误或外在原因导致的问题,这些问题能够被系统捕获并进行处理,从而避免应用程序的非正常中断。

  • 通过throws抛出异常

    ​ 定义一个方法的时候可以使用throws关键字声明抛出一个异常序列。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。

  • throw关键字抛出异常

    ​ throw关键字作用是抛出一个异常,抛出的时候是抛出的是一个异常类的实例化对象,在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出。

  • Java异常机制用到的几个关键字:try、catch、finally、throw、throws

    1. try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛
    2. catch – 用于捕获异常。catch用来捕获try语句块中发生的异常。
    3. finally – finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只
    4. finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
    5. throw – 用于抛出异常。
    6. throws – 用在方法签名中,用于声明该方法可能抛出的异常。主方法上也可以使用throws抛出。如果在主方法上使用了throws抛出,就表示在主方法里面可以不用强制性进行异常处理,如果出现了异常,就交给JVM进行默认处理,则此时会导致程序中断执行。

    抛出的示例throws

    public static void main(String[] args) throws IOException {
        InputStream is = new FileInputStream("沉默王二.txt");
        int b;
        while ((b = is.read()) != -1) {
    
        }
    }
    

    捕获的示例try----catch

    public static void main(String[] args) {
        try {
            InputStream is = new FileInputStream("沉默王二.txt");
            int b;
            while((b = is.read()) != -1) {
    
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    多异常的处理

    • 声明异常时尽可能声明具体异常类型,方便更好的处理;

      方法声明几个异常就对应有几个catch块;

      若多个catch块中的异常出现继承关系,父类异常catch块放在最后;

      在catch语句块使用Exception类作为异常类型时:所有子类实例都可以使用父类接收(向上转型),即所有的异常对象都可以使用Exception接收;

      class Demo  
      {  
          int div(int a,int b) throws ArithmeticException,ArrayIndexOutOfBoundsException//在功能上通过throws的关键字声明该功能可能出现问题  
          {  
              int []arr = new int [a];  
        
              System.out.println(arr[4]);//制造的第一处异常  
        
              return a/b;//制造的第二处异常  
          }  
      }  
        
        
      class ExceptionDemo  
      {  
          public static void main(String[]args) //throws Exception  
          {  
              Demo d = new Demo();  
        
              try  
                  {  
                      int x = d.div(4,0);//程序运行截图中的三组示例 分别对应此处的三行代码  
                      //int x = d.div(5,0);  
                      //int x = d.div(4,1);  
                      System.out.println("x="+x);   
              }  
              catch (ArithmeticException e)  
              {  
                  System.out.println(e.toString());  
              }  
              catch (ArrayIndexOutOfBoundsException e)  
              {  
                  System.out.println(e.toString());  
              }  
              catch (Exception e)//父类 写在此处是为了捕捉其他没预料到的异常 只能写在子类异常的代码后面  
                                  //不过一般情况下是不写的   
              {  
                  System.out.println(e.toString());  
              }  
                
        
        
              System.out.println("Over");  
          }  
        
      }
      
      
    • finally:回收资源

    • try块是必须存在的,catch块和finally块是可选的,但二者必须至少存在一个

    • 所有异常类的父类是Throwable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值