关于try catch finally
一、try catch finally的初步理解
首先,我们什么时候要用到try/catch和finally? ——已知执行的代码有可能有异常的情况下
try { //这里执行的代码如果出现异常,则立即跳到catch执行。}
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
finally { //不管有没有异常,finally中的代码都会执行,可以理解为只要执行了try或者catch,就一定会执行 finally }
二、try catch finally的执行顺序(无return)
1.我们来看段代码
public class Test01 {
public static void main(String[] args) {
int i = 1;
test01(i);
}
public static void test01(int i) {
try {
i++;
System.out.println("try-----"+i);
i=1/0;//制造异常句子
i++;
System.out.println("try2-----"+i);
} catch (Exception e) {
i++;
System.out.println("catch-----"+i);
}finally {
i=5;
System.out.println("finally-----"+i);
}
}
}
2.控制台输出结果为:

3.总结:从输出结果可以看出,执行顺序为:try{} catch{} finally{} ;
也就是先执行try{}(try-----2),try里面发生异常(i=i/0;),跳去执行catch(catch-----3),不管有没有发生异常都会执行的finally(finally-----5);
(如果try里面没有异常将不执行catch,这里就不予以演示了)
三、try catch finally的执行顺序(带return),这里有两种情况
第一种,return在try catch finally 后面
1.我们来看段代码
public class Test01 {
public static void main(String[] args) {
int i = 1;
i=test01(i);
System.out.println("main--------"+i);
}
public static int test01(int i) {
try {
i++;
System.out.println("try-----"+i);
} catch (Exception e) {
i++;
System.out.println("catch----"+i);
}finally {
i++;
System.out.println("finally---"+i);
}
return i;
}
}
2.控制台输出结果

3.总结:从输出结果可以看出,执行顺序为:try{} /catch{} finally{} return;
在这里没有制造异常,就正常执行,“i”的初始值是“1”,在try里面“i++”--这时候“i”的值是“2”,在到finally里面执行“i++”,这时候“i”的值是“3”;
最后返回给方法返回的是“3”。
这里也进一步说明了无论try{}里面有没有发生异常,finally{}里面的代码都会执行
第二种,return在try catch 里面——重点
1.我们来看段代码
public class Test01 {
public static void main(String[] args) {
int i = 1;
i=test01(i);
System.out.println("main--------"+i);
}
public static int test01(int i) {
try {
i++;
System.out.println("try-----"+i);
return i;
} catch (Exception e) {
i++;
System.out.println("catch----"+i);
return i;
}finally {
i=5;
System.out.println("finally---"+i);
}
}
}
2.控制台输出结果为

3.总结:从输出结果可以看出,执行顺序依然是:try{} /catch{} finally{} return;
①finally是无论如何都会执行的(打印了fianlly),所以就算try里面有return语句也不会直接返回。
②执行了finally之后,按道理来说“i”的值应该是“5”,为什么最后返回给main方法的值是“2”呢:
个人猜测:这里返回的"i"不是原来的变量“i”,而是系统另外为try里面的“i值”定义了一个“i2”,返回的是“i2”,但是在这个时候“i”的值还是finally里面定义的“5”,然后在main方法里面又把“i2值”赋给了“i”,这时候"i"亦为“2”;
4.注意:如果在finally里面添加return语句,那么将会直接返回fianlly里面的“i”,这时候main里面输出的“i”值为“5”。
这也是进一步的说明了“不管有没有异常,finally中的代码都会执行”;那finally里面的代码执行了之后,便也执行了return语句,将不再执行try里面的return语句;
关于try catch finally的更多相关文章
- SQLServer如何添加try catch
在.net中我们经常用到try catch.不过在sqlserver中我们也可以使用try catch捕捉错误,在这里把语法记录下来和大家分享一下, --构建存储过程CREATE PROCEDURE ...
- try...catch..finally
try..catch..finally try{ 代码块1 }catch(Exception e){ 代码块2 }finally{ 代码块3 } catch是抓取代码块1中的异常 代码块2是出异常后的 ...
- C++异常处理:try,catch,throw,finally的用法
写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- [c#基础]关于try...catch最常见的笔试题
引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...
- 高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...
高程三 4.2.4.3 一.执行环境 1.全局执行环境是最外层的执行环境. 2.每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前 ...
- try catch里面try catch嵌套
try catch里能否内嵌try catch?答案是肯定的.但是等内层try catch出异常之后是个什么执行顺序呢?看下面代码 static void Main(string[] args) { ...
- 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
本文转载自 java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...
- java try(){}catch(){}自动资源释放
从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Manag ...
- Java throws Exception、try、catch
throws Exception是方法后面接的 意思是向上级抛出异常 try{}里面的异常会被外面的catch捕捉到 抛出异常是throw new Exception("异常"); ...
随机推荐
- GNU C 扩展之__attribute__ 机制简介
在学习linux内核代码及一些开源软件的源码(如:DirectFB),经常可以看到有关__attribute__的相关使用.本文结合自己的学习经历,较为详细的介绍了__attribute__相关语法及 ...
- JavaScript split()函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 基于LVDS/M-LVDS的数据通信
现在有两种方案:一种基于 M-LVDS (基于总线的多节点通信) ,有其 特定的电气要求:另外一种是基于 LVDS 的点到点通信,具体说明如 下: 基于 M-LVDS 的总线通信: 基于 M-LVDS ...
- Windows 7 蓝屏原因
Windows 7 蓝屏 Microsoft (R) Windows Debugger Version 6.11.0001.404 X86 Copyright (c) Microsoft Corpor ...
- Flex中的FusionCharts 2D折线图
Flex中的FusionCharts 2D折线图 1.设计源码 LineChart.mxml: <?xml version="1.0" encoding="utf- ...
- MongoDB集群之分片
原文:点击打开链接 MongoDB分片 分片(sharding)是将数据拆分,将其分散在不同的机器上的过程.MongoDB支持自动分片 片键(shard key)设置分片时,需要从集合里面选一个键,用 ...
- Error:dijit.tree.TreeStoreModel:root query returned 0 items
1.错误描述 error loading root: Tree.js(第341行) Error:dijit.tre ...
- Flash Builder4.0运行应用程序报错
1.错误描述 SecurityError: Error #2148: SWF 文件 file:///D:/Adobe Flash Builder 4 Installer/HVBox/bin-debug ...
- POJ 2104 K-th Number 主席树
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- Windows DLL资料整理
1.使用Visual C++ 6.0创建dll 2. 函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal) 要点: 1. 如果你的程序中没有涉及可变参数,最好使 ...