由于class字节码文件不好理解的问题,这里只做一个简单的文字总结,主要可以分为9种情况:
(1)try,catch,finally语句块中均有return,三个语句块中都没有抛出异常:将执行finally语句块中的return。
(2)try,catch语句块中均有return,finally语句块中无return,三个语句块中都没有抛出异常:将执行try语句块的return。
(3)try,catch语句块中均有return,finally语句块中无return,try语句块中抛出异常且catch捕捉到异常:将执行catch语句块的return。
(4)try,catch,finally语句块中均有return,try语句块中抛出异常且catch捕捉到异常:将执行finally语句块的return。
(5)try,catch语句块中均有return,finally语句块中无return,try语句块中抛出异常且catch捕捉到异常,catch语句块又抛出了异常:将抛出catch语句块中的抛出的异常。
(6)try,catch,finally语句块中均有return,try语句块中抛出异常且catch捕捉到异常,catch语句块又抛出了异常:将执行finally语句块中的return。
(7)try,catch语句块中均有return,finally语句块中无return,try语句块中抛出异常与catch要捕捉的异常类型不一致:将抛出try语句块中的异常。
(8)try,catch,finally语句块中均有return,try语句块中抛出异常与catch要捕捉的异常类型不一致:将执行finally语句块中的return。
(9)try,catch,finally语句块中均有return,try和catch语句块没有抛出异常,finally语句块中抛出异常:将抛出finally语句块中的异常。