• try...catch..finally


    try..catch..finally

     

    try{


    代码块1


    }catch(Exception e){


    代码块2


    }finally{


     代码块3


    catch是抓取代码块1中的异常

    代码块2是出异常后的处理
    代码块3是不管出不出异常都会执行,如果代1或代2中有return,代3会在finally块的语句在try或catch中的return语句执行之后-返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。

    图:

    理解:

    1)Java程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
     
    2)当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
     
    3)如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
     
    4)对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理。
     
    5)派生类构造方法的异常说明必须包含基类构造方法的异常说明,即派生类构造方法的异常必须为基类异常或其父类,当基类构造方法没有异常时,派生类构造方法也可以异常声明。注意,派生类构造器不能捕获基类构造方法抛出的异常。
     
    6)派生类方法可以不抛出异常,即使基类有异常说明,如果派生类方法有异常说明,必须是基类异常或其子类,而且当基类没有异常声明时,派生类方法不允许异常声明(关于构造方法见5中的说明)。
     
    7)我们可以在方法声明时,声明一个不会抛出的异常,Java编译器就会强迫方法的使用者对异常进行处理。这种方式通常应用于abstract class和interface中。
     
    Java标准异常
    Throwable这个Java类被用来表示任何可以作为异常被抛出的类。Throwable对象可分为两种类型(指从Throwable继承而得到的类型):Error用来表示编译时和系统错误;Exception是可以被抛出的基本类型、在Java类库、用户方法以及运行时故障都可能抛出Exception异常。
    Java异常类的结构:
      Throwable
       |____Error
       |____Exception
             |____RuntimeException
             |____其它Exception
      Error:Java运行系统中的内部错误以及资源耗尽的情况。
      Exception:RuntimeException及其子类(编程导致的异常)、其它Exception类。
     
    关于RuntimeException
    RuntimeException(或任何从它继承的异常),对于这种异常类型,编译器不需要异常说明。注意,只能在代码中忽略RuntimeException(及其子类)类型的异常,其他类型异常的处理都是由编译器强制实施的。
     
    关于finally
    对于一些代码,可能会希望无论try块中的异常是否抛出,它们都能得到执行。为了达到这一效果,可以在异常处理程序后面加上finally子句。
    例如:
     
    方法{
      try{
      ……..
      return;//加此条语句
      }
      catch(Exception e){
      }
      finally{
      ……….//会执行
      }
      ……….//不会执行
     
    }

    ------------------------------------------------------------------------------------------------------------------------------------------------------

    方法{
      try{
      ……..
      System.exit(-1);//终止运行
      }
      catch(Exception e){
      }
      finally{
      ……….//不会执行
      }
      ……….//不会执行
     
    }
  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/qq1871707128/p/6075289.html
Copyright © 2020-2023  润新知