• 关于try catch finally 三者之间的关系(JDK 1.8)


    话不多说 线上代码

    package System;
    
    import java.util.Scanner;
    /**
     * 
     * @author chris
     *
     */
    public class TryCathfianly {
       final static int i =100;
    	public static void main(String[] args) {
    		System.out.println("请输入被除数!");
    		Scanner in= new Scanner(System.in);
    		int b;
    		int c = 0;
    		b = in.nextInt();
    		try {
    		    c = i/b;
    			System.out.println("我是try   "+c);
    		} catch (Exception e) {
    //			c++;
    			System.out.println("我是catch   "+ ++c);
    		}finally {
    //			c++;
    			System.out.println("我是finally   "+ ++c);
    		}
    	}
    }
    

      很多时候 我们的try去扑获 异常时 会用到finally   显然我们都知道 finally是会必定运行的 那么 到底怎么个运行情况呢 我们开始

    情况一 输入的被除数 非0 也就是无异常情况  结果如下

    情况二 输入的被除数为 0 此刻也就是异常情况 结果如下

    结论很简单 ! 当try中有异常的情况下 不会执行catch  并且 finally都是最后执行的(且必定执行)

    在这里 有人会说 如果给 try 和 catch 加上 return 是否不会执行 finally呢 !!! 那么好的 笔者上代码

    package System;
    
    import java.util.Scanner;
    /**
     * 
     * @author chris
     *
     */
    public class TryCathfianly {
       final static int i =100;
    	public static void main(String[] args) {
    		System.out.println("请输入被除数!");
    		Scanner in= new Scanner(System.in);
    		int b;
    		int c = 0;
    		b = in.nextInt();
    		try {
    		    c = i/b;
    			System.out.println("我是try   "+c);
    			return;
    		} catch (Exception e) {
    //			c++;
    			System.out.println("我是catch   "+ ++c);
    			return;
    		}finally {
    //			c++;
    			System.out.println("我是finally   "+ ++c);
    		}
    	}
    }
    

      很遗憾的 是 结果是一样的!!!!!!!!!!!!所以 结论成立! 谢谢 实习时间发一个博客玩玩 很多你认为不在乎的细节 了解的东西 其实往往很重要

      ---------------------------------------------------------------------------更新如下----------------------------------------------------------------------------------------

      有同学问我,那我说的finally必定会执行是错了! 那么我就和大家说一下finally何时不会执行!!!!!

      第一种情况: 当你还未执行 try的时候,你就已经return结束了当前方法,那肯定不会执行后面的finally,这肯定是正确的,不然会与return的语法冲突。

      第二种情况: 这种情况呢,很冲突啊,就是直接关掉你的JVM虚拟机,此时你拿什么执行呢?  你只需要在 try代码块中加入 System.exit(0);  

      对了   有人说 那么finally是在  return之前执行还是在return之后执行呢   在这里我就不多说了 我放一个链接吧  https://blog.csdn.net/zoujian1993/article/details/45362931

      结论!!!!!

          到底返回值变不变可以简单的这么记忆:当finally调用的任何可变API,会修改返回值;当finally调用任何的不可变API,对返回值没有影响。

          其实return与finally并没有明显的谁强谁弱。在执行时,是return语句先把返回值写入但内存中,然后停下来等待finally语句块执行完,return再执行后面的一段。

           ------------------------------以上呢就是我的补充 希望大家新的一年开开心心------------------------------------

  • 相关阅读:
    python连接mysql数据库(MySQL)
    PHP+Redis 实例【一】点赞 + 热度 上篇
    linux centos7安装phpMyAdmin详解,以及解决各种bug问题
    Linux crontab命令 定时任务 用法详解以及no crontab for root解决办法
    composer安装教程 windows系统 | Linux系统 | mac系统
    CentOS 7.0下使用yum安装MySQL
    Linux PHP多版本切换 超简单办法
    tornado 入门
    Websocket、长连接、循环连接
    阻塞和非阻塞,同步和异步
  • 原文地址:https://www.cnblogs.com/shundong106/p/10190680.html
Copyright © 2020-2023  润新知