练习一
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c409a3387654cb39ec4b986d7b61208c.png)
public class ExceptionTest {
public static void main(String[] args) {
try {
int i = 2 / 0;
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("finailly");
}
System.out.println("end-------------");
}
}
体会
- 如果不进行异常处理或者没有捕获到异常,那么程序会直接崩溃,不会执行下面的
- finally : 不管有没有捕获到异常,等会执行这里面的,跟程序崩溃与否没有关系,就算程序要崩溃,也会在崩溃之前执行完这里的逻辑
- 程序崩溃与否与异常是否被处理有关
- finally与程序是否崩溃没有关系
练习二(疑问:finally的调用时机)
package com.oceanstar;
public class ReturnExceptionDemo {
static void methodA() {
try {
System.out.println("进入方法A");
throw new RuntimeException("制造异常");
}finally {
System.out.println("用A方法的finally");
}
}
static void methodB() {
try {
System.out.println("进入方法B");
return;
} finally {
System.out.println("调用B方法的finally");
}
}
static void methodC() {
try {
System.out.println("进入方法C");
return;
} finally {
System.out.println("调用C方法的finally");
return;
}
}
public static void main(String[] args) {
try {
methodA();
} catch (Exception e) {
System.out.println(e.getMessage());
}
methodB();
methodC();
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/64385309621eca7d572819f07c673001.png)