【Java基础】[异常处理]try,catch,finally

时间:2022-12-15 13:54:38

一、什么是异常处理?

   我们做的程序需要有健壮性,即,程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素导致程序不能正常运行。

   异常处理(ExceptionHandling)就是一种解决这一问题的机制,当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。


二、使用if…else做异常处理

      

   if(一切正常){

     //业务实现代码

      }

      else{

            alert输入不合法

            goto retry

      }

   但是“一切正常”是很抽象的,无法转换成计算机可识别的代码,于是,出现:如果程序可以顺序完成,则“一切正常”。把系统的业务实现代码放在try块中定义,所有的异常处理逻辑放在catch块中处理。

   常见语法结构:

   try{

       //业务实现代码

}

   catch(Exception e){

     alert 输入不合法

   goto retry

       }

 

三、关于try catch finally     

    如果执行try块的业务逻辑代码出现异常,系统会自动生成一个异常对象,该异常对象被提交给Java运行时环境,称为抛出(throw异常。

    Java运行时环境收到异常对象,会寻找处理改异常对象的catch块,如果找到合适的catch块,则把该异常对象交给catch块处理,称为捕获(catch)异常;如果找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。

    有时,程序在try块中打开了一些物理资源(数据库连接,网络连接,磁盘文件等)这些物理资源需要被显式回收。那么,在哪里回收呢?

    Java的垃圾回收机制?NOJava的垃圾回收机制只能回收堆内存中对象所占内存。

    try块中回收?NO,当某语句执行时出现异常,该语句后面的其他语句不会获得执行机会,则该语句之后的资源得不到回收语句的执行,不能被回收。

    catch块中回收?NOcatch块完全有可能得不到执行,物理资源仍可能不能及时被回收。

    所以,finally出现了~总会被执行!

    finally块位于所有的catch块后,无论try块是否出现异常, catch块是否被执行,或trycatch块中执行了return语句,finally都会被执行!

       

try{

       //业务实现代码

}

 catch(Exception e){

     //异常处理块1

       }

Catch(Exception e){

     //异常处理块2

     }

         finally{

             //资源回收块

         }

 

四、当异常处理遇到return

   通常情况下,一旦在方法里执行到return语句的地方,程序将立即结束该方法,但在异常处理中,仍会先执行完finally块中的代码,才会执行trycatch中的return语句。所以,尽量不要在finally块中使用returnthrow等导致方法终止的语句,一旦使用,将会导致try块,catch块中的returnthrow语句失效,得不到执行。

    以上是对异常处理中try块,catch块,finally块的简单的介绍,在后面的博客中,会加入本人更深入的理解,敬请期待。