异常之谜

观看几个程序片段,分析行为

1、

<pre name="code" class="java"><span style="font-size:18px;">public static boolean fun(){
	try{
		return false;
	}finally{
		return true;
	}
}
System.out.println(fun());</span>

2、

<span style="font-size:18px;">public static boolean fun(){
	try{
		return false;
	}finally{
		System.out.println("finally");
	}
}
System.out.println(fun());</span>

3、

<span style="font-size:18px;">public static void fun(){
	try{
		System.out.println("try");
		System.exit(0);
	}finally{
		System.out.println("finally");
	}
}
fun();</span>

结果:

1、true

2、finally

false

3、try

可以看到return,finally,exit的组合会出现不同的情况,分析finally块是何时发生的。

try-finally语句中,finally语句块总是控制权离开try语句块时发生,无论try语句块时正常结束,还是意外结束。

意外情况:

1、抛出异常

2、封闭型语句执行了break,continue

3、出现return

那么exit算不算呢?应该算吧,毕竟它阻止了程序的顺序执行。

其实不是的。因为exit方法将要停止当前线程和所有其他当场死忙的线程,也就是说exit直接把try-finally的执行环境都灭了,更不要说把执行权给finally了。

时间: 2024-10-05 06:26:54

异常之谜的相关文章

Java解惑四:异常之谜

谜题36 finally语句中的return语句会覆盖掉try语句中的. 谜题37 该部分还需要进一步理解 一个方法可以抛出的被检查异常集合是它所适用的所有类型声明要抛出的被检查集合的交集. Java解惑四:异常之谜,布布扣,bubuko.com

推荐一篇好文 《计算机数值方法证伪广义相对论》

原文地址 :       https://www.taodocs.com/p-151650853.html 这是一篇 精彩 专业 的 文章,    文笔流利,  演算专业,   厚积薄发,    字字珠玑 ,    把 广义相对论 的 问题 剖析 的 一清二楚 . 关于 广义相对论 水星进动 的 部分,    我们还可以看看 这篇 文章: <广义相对论真的能解“水星进动异常”之谜吗?>       http://blog.sina.com.cn/s/blog_aec422d10101520h.

Java解惑八:更多库之谜

本文是根据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题76 将线程的启动方法start(),写成了run(); PS:管程(monitor)锁有待进一步理解. 谜题77 线程中锁的问题. 理解不深刻. 谜题78 反射会造成访问其他包中的非公共类型的成员,引起运行期异常. 谜题79 遮蔽:Thread.sleep()方法遮蔽了自定的方法. 谜题80 反射:如何实例化非静态内部类以及静态内部类.

世界十大未解之谜

世界十大未解之谜 1.泰坦尼克号沉没 1912年4月12日是个悲惨的日子——这一天,英国豪华客轮泰坦尼克号在驶往北美洲的处女航行中不幸沉没.这次沉船事件致使1 523人葬身鱼腹,是人类航海史上最大的灾难,震惊世界.这么多年来,泰坦尼克号沉没的真正原因,一直是人们探索的焦点. 1985年,人们在纽芬兰附近海域发现了沉没的泰坦尼克号残骸.紧接着,探索者们利用各种先进技术,甚至潜入冰冷黑暗的深海,企图揭示泰坦尼克号沉没的原因.然而,潜入水中的人只能看到泰坦尼克号的外观,却无法探查由于冰山撞击造成的“创

grep前传之侠影之谜 (Grep begins)

一.自述 我叫grep,是同你们一样,生活在都市里.每天做着重复的事,忙碌着. 说起来这个好笑,我生活的国家叫Bourne-Again Shell,因为我国来往人多,大家读者不便,于是心口不一的叫它"bash".bash,呵呵,好像被狠狠的砸了一下. 眼前这座烂尾楼便是我藏身的地方,它叫/bin,这里的居民都是上班族,那天下班后我数了一下用户,发现114个住户!天哪,好一座危楼! 在这个国家每家每户都供奉着一尊雕像,它叫root,对了,我和我的家人(group)都属于它,无理由的信奉着

C++进阶--解谜operator new/delete

//############################################################################ // 解谜operator new/delete /* 执行下面代码会发生什么? */ dog* pd = new dog(); /* * Step 1. 调用operator new分配内存 * Step 2. 调用构造函数构造dog * Step 3. 如果第2部抛异常,调用operator delete释放第1步分配的内存 */ de

在项目中配置PageHelper插件时遇到类型转换异常

PageHelper是一种常用的分页工具,按照常规方法在mybatis的配置文件中整合它: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> &l

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: &#39;127.0.0.1:59770&#39;, transport: &#39;socket&#39;

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro

mybaits非配置原因,导致SqlSession was not registered for synchronization异常

今天运行程序时报了 SqlSession [[email protected]] was not registered for synchronization because synchronization is not active [11:03:17]-Closing non transactional SqlSession [[email protected]] 由于异常是集中处理的,所以报了这样的错误,查了半天,网上结果都是说配置文件出错的,可是我的项目配置文件肯定是没错的,因为项目都开