try..catch语句是直接处理, 处理完成之后程序继续向下执行, 若遇到throw语句抛出异常, 则throw将异常抛给它上一级处理, 执行完finally语句之后, 程序便不再往下执行了.
finally语句无论什么情况一定会执行
一个例子:
import java.util.*;
public class Main7 {
public static void main(String[] args){
try{
int i = 100/0;
System.out.print(i);
}catch(Exception e){
System.out.println(1);
throw new RuntimeException(); //RuntimeException 运行期异常, 执行异常
}finally{
System.out.println(2);
}
System.out.println(3);
}
}
try{}语句中会出现异常,会抛出异常,System.out.print(i);不会执行
catch语句捕捉异常,继续执行System.out.print(1);
在catch语句块里, 打印完 1 之后 , 当执行throw语句时,抛出了RuntimeException异常,程序并没有处理它, 而是直接抛出, 因此执行完finally语句块之后,程序终止了. 这时除了会执行finally中的代码,其他地方的代码都不会执行
所以执行结果是12
若没有throw语句,则程序会继续向下执行,最后执行结果是123