java中finally和return的执行顺序

时间:2022-09-20 16:48:06
注意:return的位置。。。

从这几个例子中可以看到,如果try之前没有有条件的return,则try..catch..finally语句块中的语句都是顺序执行(如果try中或者catch中
有return语句,那么先执行该return,然后执行finally, 如果finally中也有return, 该出的返回值会覆盖掉try 和 catch中的return值;
如果try..catch..finally语句块之后有return语句, try中、catch中、finally中都没有 (有条件的return 语句)先按顺序执行到finally,
最后return, 如果在try中或者catch中有 (有条件的return)那么先执行该return, 然后执行finally),否则即在进入try语句块之前返回就不会执行try语句 //finaly 先执行, return 后执行
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes"); }catch(Exception e){
System.out.println("error : " + e);
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally"); }
return b+=88;
}
} //先执行第一个return, 然后执行finally public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes");
return b;
}catch(Exception e){
System.out.println("error : " + e);
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally");
return b+88;
} }
} //在try中增加一个有条件的异常抛出,然后其中的return语句被忽略
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes");
if(b==23)
throw new Exception();
return b+=123;
}catch(Exception e){
System.out.println("error : " + e);
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally"); }
return b+=88;
}
} //finally中的返回值将覆盖try中的return返回值
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes");
return b;
}catch(Exception e){
System.out.println("error : " + e);
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally");
return b+=88;
}
}
} //cathch中的return 也会被finally中的return覆盖
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes");
throw new Exception();
}catch(Exception e){
System.out.println("error : " + e);
return b;
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally");
return b+=88;
}
}
} //直接返回,下面不再执行try..catch...finally语句块
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
if(b==23) return b;
try{
System.out.println("yes");
throw new Exception();
}catch(Exception e){
System.out.println("error : " + e);
return b;
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally");
return b+=88;
}
}
}

java中finally和return的执行顺序的更多相关文章

  1. 理清Java中try-catch-finally带return的执行顺序

    前言:try-catch-finally带return和异常时,它们之间执行顺序问题是留下来的一个小疑问,今天搞清楚它们 第一种情况:无异常 //1.try-catch-finally都带有retur ...

  2. java中子类继承父类程序执行顺序

    java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...

  3. java中子类继承父类程序执行顺序问题

    Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public ...

  4. java中静态初始化块的执行顺序

    在java中,其应该是先于所有的方法执行. 下面是测试代码: public class Test1 { static{ System.out.println("执行静态初始化块test1.. ...

  5. Java中父类和子类代码执行顺序

    执行顺序:父类静态块-->子类静态块-->父类非静态块-->父类构造方法-->子类非静态块-->子类构造方法 当父类或子类中有多个静态方法时按在代码中的顺序执行 pack ...

  6. Java中try catch finally的执行顺序问题

    finally 语句块是在 try 或者 catch 中的 return 语句之前执行的.更加一般的说法是,finally 语句块应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 ...

  7. 转:Java中finally和return的执行关系

    finally可以分两方面理解 1.执行时机问题.finally总会执行(除非是System.exit()),正常情况下在try后执行,抛异常时在catche后面执行 2.返回值问题.可以认为try( ...

  8. Java中四大代码块的执行顺序(附code)

    验证证的方法是写code,如下: public class test { static class A { public static String name = "hello"; ...

  9. 我敢说你不一定完全理解try 块,catch块,finally 块中return的执行顺序

    大家好,今天我们来讲一个笔试和面试偶尔都会问到的问题,并且在工作中不知道原理,也会造成滥用. 大家可能都知道,try 块用来捕获异常,catch块是处理try块捕获的异常,finally 块是用来关闭 ...

随机推荐

  1. ScheduleThreadPoolExecutor的工作原理与使用示例

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. ScheduleExecutorService接口.ScheduledFuture ...

  2. CodeBlocks VS2015编译环境设置

    1. 菜单 Settings --> Compiler... 2. 设置vs 的安装路径

  3. C# String.Format大全 去 decimal 后面的 0

    转 http://kwon.iteye.com/blog/1068255  http://blog.csdn.net/tvvbbb/article/details/47256943 public st ...

  4. Linux(Debian)上安装Redis教程

    -- 第一步下载文件到该目录 cd /usr/local/src wget http:.tar.gz 解压 tar xzf redis.tar.gz -- 第二步编译安装 make make all ...

  5. css渲染(二) 文本

    一.文本样式  首行缩进 text-indent 首行缩进是将段落的第一行缩进,这是常用的文本格式化效果.一般地,中文写作时开头空两格.[注意]该属性可以为负值:应用于: 块级元素(包括block和i ...

  6. sql语句创建数据表

    unsigned 数值类型 无符号化 AUTO_INCREMENT 自增长 PRIMARY KEY 唯一主键 COMMENT 备注信息 BIT 类型只有1和0两个值 enum 枚举数值类型 UNIQU ...

  7. 【BZOJ4784】[ZJOI2017]仙人掌(Tarjan,动态规划)

    [BZOJ4784][ZJOI2017]仙人掌(Tarjan,动态规划) 题面 BZOJ 洛谷 题解 显然如果原图不是仙人掌就无解. 如果原图是仙人掌,显然就是把环上的边给去掉,变成若干森林连边成为仙 ...

  8. Cocos2d-x CCControlPotentiometer之圆形音量button及特效

    1. 圆形音量button 事实上作者的本意应该是叫做"电位计button".可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果: 好了,不多解释,本篇到此 ...

  9. Tomcat启动失败

    前景:使用的是tomcat9.0,配置好后,使用一切正常,刷慕课跟着做练习,也一切正常.出事在于,老师为了方便直接拷之前写的一个项目,我照做了,老师改了虚拟路径了,我忘记改了,然后跑了一下项目就出毛病 ...

  10. 高级数据结构及应用 —— 使用 bitmap 进行字符串去重

    bitmap 即为由单个元素为 boolean(0/1, 0 表示未出现,1 表示已经出现过)的数组. 如果C/C++ 没有原生的 boolean 类型,可以用 int 或 char 来作为 bitm ...