• 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{
      ……….//不会执行
      }
      ……….//不会执行
     
    }
  • 相关阅读:
    火狐优化及遇到的问题
    拷贝工程,名字不改变问题
    Ajax基础实例
    Java中检测字符串的编码格式
    innerHTML和outerHTML有什么区别
    启动Tomcat出现“Bad version number in .class file (unable to load class XXX)”解决
    MyEclipse8.6安装SVN 教程 与遇到的问题
    彻底卸载JDK的-并只依赖配置环境安装JDK(不依赖注册表)-解决Error opening registry key'softwareJavasoftJava Runti问题
    数据库下的分页代码
    WSGI
  • 原文地址:https://www.cnblogs.com/qq1871707128/p/6075289.html
Copyright © 2020-2023  润新知