import java.util.HashMap;
import java.util.Map; public class FinallyDemo1 { public static void main(String[] args) {
System.out.println("=================================");
System.out.println("A情况:finally在try的return执行之后,返回之前。");
System.out.println("main\ti="+test1());
System.out.println("=================================");
System.out.println("B情况:finally在try的return执行之后,返回之前。finally的return将覆盖try的return:");
System.out.println("main\ti="+test2());
System.out.println("=================================");
System.out.println("异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如A情况:");
System.out.println("main\ti="+test3());
System.out.println("=================================");
System.out.println("异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如B情况:");
System.out.println("main\ti="+test4());
System.out.println("=================================");
System.out.println("地址传递的参数,在try-finally中将覆盖返回值。");
System.out.println("main\tmap="+test5());
System.out.println("=================================");
System.out.println("地址传递的参数,在try-finally中将覆盖返回值。");
System.out.println("main\tmap="+test6());
System.out.println("=================================");
} /**
* finally代码块是在try代码块中的return语句执行之后,返回之前执行的。
* @return
*/
public static int test1(){
int i=1;
try {
return i+=100;
} catch (Exception e) {
System.out.println("catch");
}finally{
i++;
System.out.println("finally\ti="+i); }
return i;
} /**
* finally代码块中的return语句覆盖try代码块中的return语句
* @return
*/
@SuppressWarnings("finally")
public static int test2(){
int i=1;
try {
return i+=100;
} catch (Exception e) {
System.out.println("catch");
}finally{
i++;
System.out.println("finally\ti="+i);
return i;
}
} /**
* try代码块中的return语句在异常的情况下不会被执行;
* catch中的return执行情况与未发生异常时try中return的执行情况完全一样。
* @return
*/
@SuppressWarnings("finally")
public static int test3(){
int i=1;
try {
i=i/0;
return i+=100;
} catch (Exception e) {
System.out.println("catch");
return i+=100;
}finally{
i++;
System.out.println("finally\ti="+i);
}
} @SuppressWarnings("finally")
public static int test4(){
int i=1;
try {
i=i/0;
return i+=100;
} catch (Exception e) {
System.out.println("catch");
return i+=100;
}finally{
i++;
System.out.println("finally\ti="+i);
return i;
} } /**
* 值传递:返回值不变
* 地址传递:返回值会变
* @return
*/
public static Map test5(){
Map<String, String> map = new HashMap<String, String>();
map.put("param1", "初始化值");
try {
System.out.println("try");
map.put("param1", "try值");
return map;
} catch (Exception e) {
System.out.println("catch");
map.put("param1", "catch值");
} finally {
System.out.println("finally");
map.put("param1", "finally值");
map = null;
}
return map;
} @SuppressWarnings("finally")
public static Map test6(){
Map<String, String> map = new HashMap<String, String>();
map.put("param1", "初始化值");
try {
System.out.println("try");
map.put("param1", "try值");
return map;
} catch (Exception e) {
System.out.println("catch");
map.put("param1", "catch值");
} finally {
System.out.println("finally");
map.put("param1", "finally值");
map = null;
return map;
} } }

控制台:

=================================
A情况:finally在try的return执行之后,返回之前。
finally i=102
main i=101
=================================
B情况:finally在try的return执行之后,返回之前。finally的return将覆盖try的return:
finally i=102
main i=102
=================================
异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如A情况:
catch
finally i=102
main i=101
=================================
异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如B情况:
catch
finally i=102
main i=102
=================================
地址传递的参数,在try-finally中将覆盖返回值。
try
finally
main map={param1=finally值}
=================================
地址传递的参数,在try-finally中将覆盖返回值。
try
finally
main map=null
=================================

Java的finally语句在try或catch中的return语句执行之后还是之前?的更多相关文章

  1. Java异常处理中finally中的return会覆盖catch语句中的return语句

    Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...

  2. Java中try catch finally语句中含return语句的执行情况总结-编程陷阱

    前言:有java编程基础的人对java的异常处理机制都会有一定了解,而且可能感觉使用起来也比较简单,但如果在try catch finally语句块中遇到return语句,开发者可能就会遇到一些逻辑问 ...

  3. 【转】Java中try catch finally语句中含有return语句的执行情况(总结版)

    Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有r ...

  4. Java中try catch finally语句中含有return语句的执行情况(总结版)

    在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也 ...

  5. Java中try catch finally语句中含有return语句的执行情况

    finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因.下面 ...

  6. java finally中含return语句

    <java核心技术卷一>中提到过:当finally子句包含return 语句时(当然在设计原则上是不允许在finally块中抛出异常或者 执行return语句的,我不明白为何java的设计 ...

  7. Java中的return语句使用总结

    Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句).   在 ...

  8. java中try-catch-finally中的return语句

    在try-catch-finally语句中使用return语句遇到了一些疑问 代码一: static int intc(){ int x =0; try{ x=1; return x; }finall ...

  9. try catch finally语句块中存在return语句时的执行情况剖析

    2种场景 (1) try中有return,finally中没有return(注意会改变返回值的情形);(2) try中有return,finally中有return; 场景代码分析(idea亲测) 场 ...

随机推荐

  1. BI结构图及自动建表结构图

  2. vue.js中的表单radio,select,textarea的v-model属性的用法

    只要是表单元素,其值已经不会再用value来定义了,但是placeholder还是可以用来设置默认值. section1--input:type="text" type=" ...

  3. 工作流activi链接地址

    http://topmanopensource.iteye.com/blog/1313865

  4. canvas之刮刮乐

    效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. xfs文件系统修复

    1. 错误描述 启动CentOS7系统,发现进步了图形界面,并报如下错误: Error getting authority: Error initializing authority: Could n ...

  6. ffmpeg mp4 mp3 wav flac webm aac ac3 ogg格式转换

    版权声明:本文为博主原创文章,未经允许不得转载. ffmpeg是Linux中转换音频视频文件的常用工具. mp4 to mp3: ffmpeg -i $ID.mp4 -acodec libmp3lam ...

  7. RabbitMQ 关键词解释

    源地址: https://www.cnblogs.com/hz04022016/p/6518138.html RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQ ...

  8. Numpy的基本操作和相关概念(一)

    基础操作 np.random.randn() 符合正态分布的数据 np.vstack((a,b)) 矩阵水平拼接 np.hstack((a,b)) 矩阵垂直拼接 np.dot(a,c) 点阵积 A@B ...

  9. 杭电 5326 Work (并查集求子结点为k的结点数)

    Description It’s an interesting experience to move from ICPC to work, end my college life and start ...

  10. cherrypy入门

    主要是一个简单的cherrypy hello例子 import cherrypy from jinja2 import Environment, FileSystemLoader import os ...