1.JAVA中遇到checkException的话 我们通常会通过try.catch 。finally来处理。
我们先来说说程序运行的时候不会发生异常的这种情况。
a.他们的执行顺序一般是先执行try里面的语句块(其中在try中没有return),如果程序没有发现异常则跳过catch语句块,进入finally语句块。--这个很常见。
b.加入try中有return语句呢。程序的执行顺序是这样的先进入try语句块,把return的值进行赋值,但是这时候程序还没有终止。假设这时候没有Exception. 那么执行到return这个语句的时候 就会执行finally语句块。(一般情况下finally语句块中不会有return,如果有return语句则执行完finally中的return语句后,程序就终止运行,不会返回try中的return 语句了。) 如下:最后的返回结果总是finally.因为finally中的return把try中的return给覆盖了。因此我们一般在finally中不会有return语句。
public class TestException {
public static void main(String[] args) {
testException();
}
public static String testException(){
try {
FileReader frFileReader = new FileReader("d:/axbb.txt");
return "try";
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
return "finally";
}
}
}
如果程序发生异常呢,那么执行顺序就是先执行try语句块,直到程序发生异常的那一行,然后执行catch语句块,不管catch中有没有return,程序会接着执行finally语句块。
总的来说,try和finally是一定会执行的。 我们一般在try中放入可能会出现异常的语句,在catch中加入出现异常时的处理方式,在finally中是一定会执行到的,我们通常会在finally中进行流和资源的关闭操作。加入没有对流和资源进行关闭的话,如果是我们单个人使用还好,如果是做成web项目之类的,提供给多个人调用,那么每次没有关闭一个流和一个资源,在虚拟器中就会多了一个没有使用的对象。调的人多的会造成程序越来越卡的现象。