上午在搜索"System.runFinalization"的时候,搜到 http://www.cnblogs.com/Skyar/p/5962253.html ,其中有关于try-catch-finally的部分,特整理如下

先看下面这个方法的返回值

public static String test(){
String x="";
String y=null;
try{
x=y.replace("A","B");
return x+"C";
}catch(Exception e){
x="D";
return x+="EFG";
}finally{
x=x+"H";
return x; //返回DEFGH
}
}

执行过程

  1. 执行try块:执行中抛出一个"NullPointerException",被catch块捕获;return语句得不到执行
  2. 执行catch块:x="D"。此时x=D
  3. 执行catch块:x+="EFG"。此时x=DEFG,return操作挂起
  4. 执行finally块:x=x+"H"。此时x=DEFGH
  5. 执行finally块:return x。将x=DEFGH返回给调用者
  6. 该方法结束

执行机制

  • 如果try中没有异常抛出

    • 执行到try块时,如果return后面跟的是个语句,把该语句运算完,暂时放下不return;
    • 寻找并执行finally语句块,如果finally中有return语句,就执行并return,方法结束;如果没有return语句,就返回执行try中的return,方法结束
  • 如果try中抛出异常
    • try块中抛出异常的这个语句后面的语句都不会执行,后面的return执行不到
    • catch块捕获后,执行catch块,到return语句时,运算完return后面的语句,暂时放下不return
    • 寻找并执行finally语句块,遇到return语句,运算并return,方法结束;如果没有return语句,就返回执行catch的return,方法结束

参考资料:http://www.cnblogs.com/Skyar/p/5962253.html

0016 Java学习笔记-异常-如果try-catch-finally中都存在return语句会怎样?的更多相关文章

  1. Java学习笔记--异常描述

    异常描述 1.简介 为了全面了解"异常"的概念,先来分析一个实例.假定要编写一个Java程序,该程序读取用户输入的一行文本,并在终端显示该文本.这里是一个演示Java语言I/O功能 ...

  2. Java学习笔记--异常机制

    简介 在实际的程序运行过程中,用户并不一定完全按照程序员的所写的逻辑去执行程序,例如写的某个模块,要求输入数字,而用户却在键盘上输入字符串:要求打开某个文件,但是文件不存在或者格式不对:或者程序运行时 ...

  3. java学习笔记 --- 异常

    异常 (1)程序出现的不正常的情况. (2)异常的体系   Throwable    |--Error  错误,严重问题,我们不处理.    ·    |--Exception 异常     |--R ...

  4. 10.1(java学习笔记)JDBC基本操作(连接,执行SQL语句,获取结果集)

    一.JDBC JDBC的全称是java database connection java数据库连接. 在java中需要对数据库进行一系列的操作,这时就需要使用JDBC. sun公司制定了关于数据库操作 ...

  5. Java学习笔记之基础语法(顺序,条件,循环语句)

    顺序结构:自上而下 条件分支选择结构: if条件语句   1,一旦某一个分支确定执行以后,其他分支就不会执行.if后面的条件必须是boolean类型   2,if  后面如果不加大括号,默认相邻的下一 ...

  6. JAVA学习笔记—review基本知识[反射与异常]

    JAVA学习笔记—review基本知识[反射与异常] 1.异常: 1.1异常的分类: Java会将所有的异常封装成对象,其根本父类为Throwable. Throwable有两个子类:Error 和E ...

  7. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  8. 20145330第十周《Java学习笔记》

    20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...

  9. 20145330第五周《Java学习笔记》

    20145330第五周<Java学习笔记> 这一周又是紧张的一周. 语法与继承架构 Java中所有错误都会打包为对象可以尝试try.catch代表错误的对象后做一些处理. 使用try.ca ...

随机推荐

  1. 孙鑫MFC学习笔记14:网络编程

    1.OSI 2.TCP/IP与OSI对应关系 3.Socket 4.客户机/服务器模式 5.Windows Sockets 6.套接字类型 7.面向连接的socket编程 8.面向无连接的socket ...

  2. MySQL Workbench返回所有的记录

    使用MySQL Workbench查询数据库,当返回的记录较多时,不能显示所有的记录,因为MySQL Workbench默认只返回1000条记录. 为了显示所有的记录,可以在查询语句后面加一句: LI ...

  3. 两台Linux主机之间文件的复制

    使用scp命令可以实现两台Linux主机之间的文件复制,基本格式是: scp [可选参数] file_source file_target 1. 复制文件 命令格式: scp local_file r ...

  4. PyMySQL Evaluation

    PyMySQL Evaluation This page will capture issues related to Openstack moving to the PyMySQL driver f ...

  5. 数据操作语言DML与运算符

    数据操作语言DML(添加,修改,删除) 1.添加数据 insert into insert into 表名 (字段列表) values (值列表),值列表要和字段列表按顺序匹配. insert int ...

  6. [javaSE] 反射-Class类的基本操作

    获取类的名称 获取该类的方法 获取方法的返回值类型 获取方法的名称 获取方法的参数的类型 package com.tsh.reflect; import java.lang.reflect.Metho ...

  7. servletcontext监听器的启动位置以及tomcat和eclipse的目录结构

    情景: 想在应用启动的时候就加载spring容器 在ServletContextListener.contextInitialized()中加载spring容器 ApplicationContext ...

  8. Squire – 简洁的 HTML5 富文本编辑器

    Squire 是一个简洁的 HTML5 富文本编辑器,它提供了强大的跨浏览器的标准化,超级轻巧灵活.它是建立在现在和未来并作为研究,因此并不支持那些古老的浏览器. 在线演示      源码下载 您可能 ...

  9. Voix.js – 使用声音来控制和操纵你的网站

    我们通常使用鼠标和键盘(在移动端使用触摸)来操作网站,如今 Voix.js 能够让我们使用声音控制网站,很酷吧?它可以启动和停止侦听麦克风,在检测到一个给定的关键字时触发绑定的特定事件.Voix.js ...

  10. Ifvisible.js – 判断网页中的用户是闲置还是活动状态

    ifvisible.js 是一个跨浏览器.轻量级的方式,用户检查用户在浏览页面或正在与它进行交互.它可以处理活动状态,如在页面上空闲或活跃.您还可以使用 ifvisible.js 智能设置您的间隔,如 ...