java中Finally块的执行
在try{}catch{}finally{}块中,都知道finally子块是肯定会执行的。当然也有个别情况,当在try{}或者catch{}块中出现强制退出System.exti(int)时,finally子块就不会执行了。这种情况不在今天的谈论范围以内。
看代码更加直观些:
- package practice;
- public class FinallyRun {
- private int a = 0;
- public int getInt() {
- try {
- a = 1;
- return a;
- } finally {
- a = 2;
- // return a;
- }
- }
- public static void main(String[] args) {
- FinallyRun f = new FinallyRun();
- int tmp = f.getInt();
- System.out.println("f.getInt() = " + tmp);
- System.out.println("f.a = " + f.a);
- }
- }
我在a=1出打了断点,单步跟踪发现:尽管try中包含return,并且try中的return语句执行完,程序就会跳到finally中,继续跑下去,然后返回退出getInt()方法。结果如下:
- f.getInt() = 1
- f.a = 2
从结果中可以看出,getInt()方法返回值的1,而变量a的值为2。把代码中的注释取消,运行程序结果如下:
- f.getInt() = 2
- f.a = 2
这次变量a的值和方法返回值都为2。
过程比较简单。在try{}中return执行后,会带着这个return流进入finally子块中,虽然finally中修改了变量a的值,但是没有影响到return流中的数据;如果finally中也有return语句,那么finally子块中的return流就会覆盖之前try{}中的return流,然后从方法退出。
如有不对,敬请指正。
java中Finally块的执行的更多相关文章
- Java中static块执行时机
Java中static块执行时机 演示例子 在使用static进行初始化的操作,怎么也执行不了!代码如下: public class StaticDemo { public static final ...
- Java的初始化块及执行过程详解
问题:Java对象初始化方式主要有哪几种?分别是什么?针对上面的问题,想必大家脑海中首先浮现出的答案是构造器,没错,构造器是Java中常用的对象初始化方式. 还有一种与构造器作用非常相似的是初始化块, ...
- java静态初始化块的执行顺序
先来观察下面的代码 package trr; class Root { static{ System.out.println("Root的静态初始化块"); } { System. ...
- java中如何生成可执行的jar文件
java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$ ...
- java中代码块和构造方法以及普通方法的代码执行顺序总结
说实话,这块真的不好理解啊~都怪jvm 执行顺序搞这么复杂,哼╭(╯^╰)╮ 但是 我们能怎么办,只能研究呗!!! !:首先,毫无置疑的,静态代码块在加载时就执行了,所以肯定是最先执行的.... ...
- Java中异常发生时代码执行流程
异常与错误: 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员) ...
- java中初始化块、静态初始化块和构造方法
(所谓的初始化方法init()是另一回事, 在构造方法之后执行, 注意不要混淆) 在Java中,有两种初始化块:静态初始化块和非静态初始化块.它们都是定义在类中,用大括号{}括起来,静态代码块在大括号 ...
- java中new一个对象的执行过程及类的加载顺序
1,new一个对象时代码的执行顺序 (1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的) 1.为父类的静态属性分配空间并赋于初值 1.执行父类静态初始化块; (2)加载子类 2.为子类 ...
- java中代码块的认知
在以往面试题中,出现过很多次关于代码块执行顺序的题目,目前可算是搞清楚执行顺序了.看以下代码: package com.itcast.code; public class BlockTest { st ...
随机推荐
- 详解Bootstrap网格系统
bootstrap框架中的网格系统就是将容器平分成12份,在使用的时候可以根据实际情况重新编译LESS/SASS源码来修改12这个数值.bootstrap框架的网格系统工作原理: 1.数据行(.row ...
- [ShareSDK for Android]新浪微博常见问题
一.新浪sso授权报错sso package or sign error 1. 新浪微博开放平台应用没有审核通过,不能用sso登陆,否则报错.关闭sso登陆Platform platform = Sh ...
- java list中的对象去重原理
/******************************************************************************* * * Copyright (c) W ...
- 针对不同的Cookie做页面缓存
有时我们需要为PC浏览器及移动浏览器生成不同的页面,为了提高性能,不能每次请求都去判断User-Agent,通常用一个 Cookie 标记一下客户端是否是移动客户端,这样只需要读取这个 Cookie ...
- Python中import的使用
python中的import语句是用来导入模块的,在python模块库中有着大量的模块可供使用,要想使用这些文件需要用import语句把指定模块导入到当前程序中. import语句的作用 import ...
- [玩转微信平台]XML的格式化- 如何去掉XML 文档头和命名空间
前言 系统要求能够回复微信用户发过来的文本消息.实现中使用的实体对象进行XML的序列化的方式来实现XML消息. 微信平台的回复例子 http://mp.weixin.qq.com/wiki/14/ ...
- @Html.DropDownList 设置选中值无效
有时候在ASP.NET MVC中用@Html.DropDownList 设置选中值无效,如图: 具体原因说不清,反正只要改个名字就行了!!!,如图:::
- cocos2d-x-3.0 的改变,由于变得太多,一点点累积吧!
1.cpp 改成 Point 2.setIsRelativeAnchorPoint() 改成 ignoreAnchorPointForPosition() 3.Layer::create 图 ...
- 聊聊IO多路复用之select、poll、epoll详解
本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538922&idx=1&sn=e6b436ef ...
- ubuntu下 mysql5.6.4 +sphinx安装
安装mysql 5.6.4 下载源码 安装cmake sudo apt-get install cmake 进入mysql源码包: 创建mysql用户与用户组 groupadd mysql usera ...