class Exc{
int a;
int b;
} public class Except {
@SuppressWarnings("finally")
static int compute (){
Exc e = new Exc();
e.a = 10;
e.b = 10;
int res = 0 ;
try{
res = e.a / e.b;
System.out.println("try ……");
return res + 1; }catch(NullPointerException e1){
System.out.println("NullPointerException occured");
}catch(ArithmeticException e1){
System.out.println("ArithmeticException occured");
}catch(Exception e3){
System.out.println("Exception occured");
}finally{
System.out.println("finnaly occured");
}
System.out.println(res); return res+3;
} public static void main(String[] args){
int b = compute();
System.out.println("mian b= "+b);
}
}

  输出:

try ……
finnaly occured
mian b= 2

结论: 如果没有异常, 则执行try 中的代码块,直到 try 中的 return,接着执行 finally 中的代码块,finally 执行完后 , 回到try 中执行 return 。退出函数。

class Exc{
int a;
int b;
} public class Except {
@SuppressWarnings("finally")
static int compute (){
Exc e = new Exc();
// e.a = 10;
// e.b = 10;
int res = 0 ;
try{
res = e.a / e.b;
System.out.println("try ……");
return res + 1; }catch(NullPointerException e1){
System.out.println("NullPointerException occured");
}catch(ArithmeticException e1){
System.out.println("ArithmeticException occured");
}catch(Exception e3){
System.out.println("Exception occured");
}finally{
System.out.println("finnaly occured");
}
System.out.println(res); return res+3;
} public static void main(String[] args){
int b = compute();
System.out.println("mian b= "+b);
}
}

  输出:

ArithmeticException occured
finnaly occured
0
mian b= 3

结论: 如果try 中有异常, 则在异常语句处,跳转到catch 捕获的异常代码块, 执行完 catch 后,再执行 finally ,跳出 try{}catch{}finally{} ,继续向下执行,不会去执行try中 后面的语句。

public class Test2 {
public static void main(String [] args){
System.out.println(com());
} @SuppressWarnings("finally")
static boolean com(){
try{
return true;
}finally{
return false;
} }
}

  输出 false

public class Test3 {
public static void main(String[] args){
try{
System.out.println("try……");
System.exit(0);
}finally{
System.out.println("finally……");
}
}
}

输出: 

try……  程序退出,不执行 finally

try finally 执行顺序的更多相关文章

  1. Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

    Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, ...

  2. MonoBehaviour Lifecycle(生命周期/脚本执行顺序)

    脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...

  3. Unity中脚本的执行顺序总结(@WhiteTaken)

    (Editor)以上是Unity官方文档中的截图,脚本在被挂载到物体上,会启用Editor的方法Reset. (Initialization)当执行脚本开始,初始化的过程中,依次执行的是Awake-& ...

  4. 《Java编程思想》学习笔记(二)——类加载及执行顺序

    <Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...

  5. Java学习笔记__异常机制_try_catch_finally_return执行顺序

    package cn.xiaocangtian.Exception; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

  6. 关于sql的执行顺序

    标准sql的解析顺序为 1)FROM子句,组装来自不同数据源的数据 2)WHERE子句 基于制定的条件对记录进行筛选 3)GROUP BY 子句将数据划分为多个分组 4)使用聚合函数进行计算 5) 使 ...

  7. SQL 语句与性能之执行顺序

    select * , t3.Name from t1 left join t2 on t1.sysno = t2.Asysno left join t3 on t3.sysno = t2.Bsysno ...

  8. 关于JavaScript预编译和执行顺序以及函数引用类型的思考

    昨晚在对项目中的一部分做模块化处理的时候,遇到了一个问题,一个重新定义的function对一个通用类中的function进行赋值覆盖的时候,失败了.问题抽象出来是这样的: <script > ...

  9. JMeter专题系列(三)元件的作用域与执行顺序

    1.元件的作用域 JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(conf ...

  10. [转载]T-SQL(Oracle)语句查询执行顺序

    原文链接:http://blog.sina.com.cn/s/blog_61c006ea0100mlgq.html sql语法的分析是从右到左,where子句中的条件书写顺序,基本上对sql性能没有影 ...

随机推荐

  1. 认识多渲染目标(Multiple Render Targets)技术 【转】

    认识多渲染目标(Multiple Render Targets)技术 首先,渲染到纹理是D3D中的一项高级技术.一方面,它很简单,另一方面它很强大并能产生很多特殊效果. 比如说发光效果,环境映射,阴影 ...

  2. storm安装配置

    1.修改主机名: vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=MASTER 2.修改IP: 先用ifconfig得到ip信息,将其复制 设置i ...

  3. 【招聘App】—— React/Nodejs/MongoDB全栈项目:消息列表

    前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...

  4. Linux 部署ftp报530 错误解决方案

    sudo apt-get remove vsftpdsudo rm /etc/pam.d/vsftpdsudo apt-get install vsftpd 这是因为ubuntu启用了PAM,所在用到 ...

  5. 【DP】【单调队列】【NOI2005】瑰丽华尔兹

    340. [NOI2005] 瑰丽华尔兹 ★★★ 输入文件:adv1900.in 输出文件:adv1900.out 简单对照 时间限制:1 s 内存限制:128 MB [任务描写叙述] 你跳过华尔兹吗 ...

  6. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何设置PLC的扫描周期,运行周期

    双击PlcTask,然后再Cycle ticks中可以修改PLC的扫描周期,例如修改为2ms   为了验证是否真的是2ms,可以在程序中跟计数器绑定使用,PLC2ms扫描一次,计数器也是每个周期增加0 ...

  7. Quartz与Spring的整合使用

    之前说到过Quartz的基本使用(猛戳这里看文章).在实际使用中,我们一般会将定时任务交由spring容器来管理.所以今天我们来说说Quartz与spring的整合. 咱们还是依照Quartz的三大元 ...

  8. javascript - 你不容错过的es6模板写法

    /** * ``即重音符(128键盘左上角ESC下面那个键盘) * 隶属:模板字符串 */ let unit = '4'; let keywords = 'uc'; // step1:模板变量 ${v ...

  9. getopt函数的用法

    Linux提供了一个解析命令行参数的函数. #include <unistd.h> int getopt(int argc, char * const argv[], const char ...

  10. npm install --no-bin-links中的参数“no-bin-links”表示什么意思

    npm install --no-bin-links中的参数"no-bin-links"表示什么意思