Java的finally语句

    科技2025-04-19  14

    1.finally语句

    关于try...catch中的finally语句:

    1.1在finally字句中的代码是最后执行的,并且一定会执行的,即使try...catch语句块中的代码出现了异常。

    finally语句必须和try一起出现,不能单独编写。!!!

    2.finally语句的用处,请看以下代码分析

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /** * 观察以下程序会看到什么问题? * 我们知道创建一个流之后,是要将它关闭的,否则就会浪费资源。 * 看以下程序中的s字符串是一个空串,会发生空指针异常,而这个异常是运行时异常,所以 * 捕捉到空指针异常之后,程序就会退出,从而导致后面的fis.close()语句执行不了,流就关闭不了。 * 现在finally语句就会发生用处了。 * */ public class Test1 { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream(""); String s = null; s.toString(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }catch(NullPointerException e){ e.printStackTrace(); } } }

    那解决的方法是什么呢?  

    public class Test1 { public static void main(String[] args) { FileInputStream fis=null; try { fis = new FileInputStream(""); String s = null; s.toString(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }catch(NullPointerException e){ e.printStackTrace(); }finally{ if(fis!=null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

    finally语句的执行顺序

    /** * 接下来时关于finally语句块的解析: * 观察以下代码,finally语句是否会执行 */ public class Test1 { public static void main(String[] args) { try{ System.out.println("try....."); return ; }finally{ System.out.println("finally...."); //try..... //finally.... } } } /** * 事实证明虽然在try语句中有return的存在,但是并不会影响后面finally语句中的执行 * 那么代码的执行顺序是什么样的呢? * 先执行try... * 再执行finally... * 最后执行return */

    Java的finally语句有一个重要的易错的地方

    public class Test1 { public static void main(String[] args) { int result=doSome(); System.out.println(result);//100 } private static int doSome() { int i=100; try{ return i; }finally{ i++; } } }

    为什么输出的结果是100,而不是101呢,如果按照以上的程序来看,输出的结果的确是101.

    这是因为Java中有这样一种规定:

    (1).方法体中的代码必须遵循自上而下的顺序依次执行

    (2).return语句一旦执行整个方法必须结束

    以上代码反编译之后的代码是这样的

    public static int doSome(){ int i=100; int j=i; i++; return j; }

    我们可以知道代码的执行顺序是这样的,返回的值是100,以上的两条规则都没有违背

     

    finally,final,finalize有什么区别

    final是一个关键字,修饰的变量表示最终的,不变的

    finally是一个关键字,和try关键字一起联合使用,使用在异常的处理机制中

    在finally语句块中的代码一定会执行的。

    finalize是Object中的一个方法,作为方法名出现是一个方法名,是JVM的垃圾回收器GC调用的一个方法。

     

     

     

     

     

     

     

     

     

    Processed: 0.010, SQL: 8