一、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的更多相关文章

  1. SQLServer如何添加try catch

    在.net中我们经常用到try catch.不过在sqlserver中我们也可以使用try catch捕捉错误,在这里把语法记录下来和大家分享一下, --构建存储过程CREATE PROCEDURE ...

  2. try...catch..finally

    try..catch..finally try{ 代码块1 }catch(Exception e){ 代码块2 }finally{ 代码块3 } catch是抓取代码块1中的异常 代码块2是出异常后的 ...

  3. C++异常处理:try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  4. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  5. [c#基础]关于try...catch最常见的笔试题

    引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...

  6. 高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...

    高程三 4.2.4.3 一.执行环境 1.全局执行环境是最外层的执行环境. 2.每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前 ...

  7. try catch里面try catch嵌套

    try catch里能否内嵌try catch?答案是肯定的.但是等内层try catch出异常之后是个什么执行顺序呢?看下面代码 static void Main(string[] args) { ...

  8. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  9. java try(){}catch(){}自动资源释放

    从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Manag ...

  10. Java throws Exception、try、catch

    throws Exception是方法后面接的 意思是向上级抛出异常 try{}里面的异常会被外面的catch捕捉到 抛出异常是throw new Exception("异常"); ...

随机推荐

  1. SPI知识总结

    SPI知识总结 一.定义 SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息. 优 ...

  2. ubuntu自动登录tty1(shell,text)配置

    1.写脚本autologin 代码: #!/bin/bash/bin/login -f #你的用户名 移动到/usr/bin/下,并且用chmod +x autologin设置可执行权限 2.修改/e ...

  3. Linux 的进程状态

    (1)运行:当一个进程在处理机上运行时,则称该进程处于运行状态.处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个.在没有其他进程可以执行时(如所有进程都在阻塞状 ...

  4. 为Hi3531添加4串口支持

    修改文件为 linux-3.0.y\arch\arm\mach-godnet\core.c linux-3.0.y\arch\arm\mach-godnet\include\mach\irqs.h 修 ...

  5. linux之x86裁剪移植---字符界面sdl开发入门

    linux下有没有TurboC2.0那样的画点.线.圆的图形函数库,有没有grapihcs.h,或者与之相对应或相似的函数库是什么?有没有DirectX这样的游戏开发库?SDL就是其中之一. SDL( ...

  6. Ubuntu Desktop变为Ubuntu Server服务器版的方法

    去Ubuntu官网看到有好几种版本可以下载,alternate(文本安装).desktop9(桌面).netbook(上网本).server(服务器). 使用server版某个理由: 32位的系统可以 ...

  7. JavaScript通过ID和name设置样式

    JavaScript通过ID和name设置样式 1.说明 (1)根据所提供的元素的id值,返回对该元素的引用或节点 document.getElementById("tr_th") ...

  8. JSP路径出现问题

    1.错误描述 2.错误原因 <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  9. Java中的List转换成JSON报错(二)

    1.错误描述 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/loggi ...

  10. 芝麻HTTP:Scrapyd的安装

    Scrapyd是一个用于部署和运行Scrapy项目的工具,有了它,你可以将写好的Scrapy项目上传到云主机并通过API来控制它的运行. 既然是Scrapy项目部署,基本上都使用Linux主机,所以本 ...