try,catch,finally和return执行顺序的知识点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了try,catch,finally和return执行顺序的知识点相关的知识,希望对你有一定的参考价值。

   今天java学到try,catch,finally以及return的使用,刚开始模糊不清,后来也差不多清楚了,分享给大家,有什么问题谢谢指出。

   

    try-catch是java中用来捕获异常的方法,也就是帮我们找到代码中存在的异常,其格式如下:

  try{

  代码段1

     }

  catch{

  代码段2

     }

  代码段1是一段存在异常的代码,代码段2是处理代码段1异常的一些方法,当然可以有多个catch,表示同时提供多个处理代码段1异常的方法。(当代码段1没有异常的时候,try语句直接完成执行,不再执行catch语句)


try{

  代码段1

  return1代码段1如果

    }

   catch{

  代码段2

  return2

   }

  没有finally时,代码段1如果如果没有异常则仅仅执行代码段1,catch语句没有执行,结果是return1。

  

  接下来我们说重点,当有finally存在时,格式如下:

   try{

  代码段1

  return1

    }

   catch{

  代码段2

  return2

   }

  finally{

 代码段3

  return3

   }


 首先我们需要知道这段捕获异常的代码执行完毕后需要返回一个对应类型的数据类型。

则return关键字可能出现在return1,return2,return3 三处位置。


 try{

  代码段1

  return1 

}

 catch{

  代码段2

  return2

}

 finally{

 代码段3

  return3 

}

  代码段1如果没有异常则首先执行代码段1,然后直接执行finally中代码段3,随后执行此时可分为两种情况:


(1)return3位置如果存在return语句,则执行完代码段3后直接结果return3,执行完毕;

(2)return3位置如果不存在return语句,则执行完代码段3后跳回try语句中执行return1;



  代码段1存在异常,首先执行代码段1捕获异常,然后执行catch语句中代码段2,接着执行finally中代码段3,随后执行可分为两种情况:


(1)return3位置如果存在return语句,则执行完代码段3后直接结果return3,执行完毕;

(2)return3位置如果不存在return语句,则执行完代码段3后跳回catch语句中执行return2;



  综上所述,也就是说

如果存在finally那么finally必须被执行,


如果finally中有return语句,则返回值就是finally中的return值,

如果finally语句中没有return语句,则跳回上一个执行阶段,返回值就是上个执行阶段的return值。




以上是关于try,catch,finally和return执行顺序的知识点的主要内容,如果未能解决你的问题,请参考以下文章

java try catch finally return执行顺序

try{ } catch{ } finally{ }

try catch finally 块里都有return

Try-catch-finally-return 澄清 [重复]

try catch finally,try里有return,finally还执行么?

try-catch-finally 中哪个部分可以省略?try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?