Java 基础 - 异常机制详解
Java 基础 - 异常机制详解
Java 基础 - 异常机制详解 | Java 全栈知识体系
try和finally执行顺序
public class ExceptionDemo {
private int x = 0;
public static void main(String[] args) {
System.out.println("test1结果" + new ExceptionDemo().test1());
System.out.println("test2结果" + new ExceptionDemo().test2());
System.out.println("test3结果" + new ExceptionDemo().test3());
}
// try块中的return语句执行成功后,并不马上返回,而是继续执行finally块中的语句。
// 这是Java语言的强制性设计,为了保证资源清理的可靠性。
// ++x操作会执行,再去执行finally
public int test1() {
try {
System.out.println("test1 执行try");
return ++x; // ++x操作会执行,再去执行finally
} finally {
System.out.println("test1 执行finally");
}
}
// 不要在finally块中使用return。
// 如果finally块中存在return语句,则在此直接返回,无情丢弃掉try块中的返回点。
public int test2() {
try {
// x等于1,此处不返回
return ++x;
} finally {
// 返回的结果是2
return ++x;
}
}
// Java使用了"返回值暂存"机制
// 因为 return 的值在 try 块中已确定为 1,finally 块虽会执行并修改 i 为 2,但不会影响已决定的返回值。
public int test3() {
int i = 0; // 步骤1: i=0
try {
i = 1; // 步骤2: i=1
return i; // 步骤3: 暂存返回值1,准备返回
} finally {
i = 2; // 步骤4: i=2,但返回值已固定为1
} // 步骤5: 返回之前暂存的值1
}
}
JVM处理异常的机制?
Java 基础 - 异常机制详解 | Java 全栈知识体系
异常发生的时候,当一个异常发生时
- 1.JVM会在当前出现异常的方法中,查找异常表,是否有合适的处理者来处理
- 2.如果当前方法异常表不为空,并且异常符合处理者的from和to节点,并且type也匹配,则JVM调用位于target的调用者来处理。
- 3.如果上一条未找到合理的处理者,则继续查找异常表中的剩余条目
- 4.如果当前方法的异常表无法处理,则向上查找(弹栈处理)刚刚调用该方法的调用处,并重复上面的操作。
- 5.如果所有的栈帧被弹出,仍然没有处理,则抛给当前的Thread,Thread则会终止。
- 6.如果当前Thread为最后一个非守护线程,且未处理异常,则会导致JVM终止运行。
以上就是JVM处理异常的一些机制。
浙公网安备 33010602011771号