关于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再执行后面的一段。

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

原文地址:https://www.cnblogs.com/shundong106/p/10190680.html