标签:返回 catch 变量 exe 编译器 追溯 出现 voc span
异常的基类(超类)是Throwable,throwable有两个子类,分别为:Error、Exception。
Error:指程序中出现无法处理的错误。在出现Error时,JVM虚拟机会选择将出现Error的线程关闭。
Exception:异常,指程序本身可以处理的异常。异常分为:运行时异常和非运行时异常。
运行时异常:程序是可以编译通过的,只有程序执行到异常位置时才出抛出异常。
非运行时异常:程序是编译不通过的。
PS:在开发过程中尽量不要出现运行时异常。Error和Exception是非检查型异常。
检查型异常:经编译器验证。
非检查型异常:编译器是检查不出来的异常,而Error和Exception都是非检查弄异常。
哪些情况下不执行catch或finally代码块:
(1)、finally 语句不被执行唯一情况,在try 代码块中执行System.exit()此语句会退出JVM进程,此时不执行catch代码块;
public void test1() { try { // TODO: 2020/5/31 System.exit(0); } catch (Exception exec) { System.out.println("exception: " + exec); } finally { System.out.println("End"); } }
(2)、在try语句代码块中执行return语句,但是,在return之前先执行finally代码块,return返回分两步:1. 计算return返回值并赋值给未知名的变量;2. return将未知名变量返回;而finally语句在第二前执行;
public int test2() { try { // TODO: 2020/5/31 System.out.println("try start"); return 0; } catch (Exception exec) { System.out.println("exception: " + exec); } finally { System.out.println("End"); } return 0; }
(3)、不要通过finally语句改变return返回变量的值,在情况2中描述了return返回流程,return 表达式,先执行表达式,再执行finally语句,再执行return返回。通过此方式不能修改返回变量的值。并且不建议这样做。
public int test3() { int temp = 10; try { // TODO: 2020/5/31 System.out.println("try start"); return temp; } catch (Exception exec) { System.out.println("exception: " + exec); } finally { temp = 100; System.out.println("End"); } return temp; }
(4)、finally语句中不要使用return语句,会导致出现错误,比如:finally语句上的return会覆盖try语句的return;
public int test4() { try { // TODO: 2020/5/31 System.out.println("try start"); return 0; } catch (Exception exec) { System.out.println("exception: " + exec); } finally { System.out.println("End"); return 10; } }
标签:返回 catch 变量 exe 编译器 追溯 出现 voc span
原文地址:https://www.cnblogs.com/naray/p/13018922.html