finally关键字

finally的特点

被finally控制的语句体一定会执行,除非在执行finally语句体之前JVM退出(比如System.exit(0)),一般用于关闭资源

finally如何使用?

finally语句块可以直接和try语句块联用:try….finally…(这种用的比较少)

也可以这样使用:try…catch….finally


package com.jh.exception;

public class FinallyTest01 {

    publicstaticvoidmain(String[] args){

        try {

            System.out.println(jh / 0);

        } catch (ArithmeticException e) {

            e.printStackTrace();

        } finally{

            System.out.println("finally中的内容");

        }

    }

}


即使在方法里面执行了return,finally中的代码也会执行


package com.jh.exception;

public class FinallyTest02 {publicstaticvoidmain(String[] args){

        int i = m1();

        System.out.println(i);

    }

    publicstaticintm1(){

        int i = 10;

        try{

            return i;

        }finally{

            System.out.println("finally中的语句");

        }

    }

}


只有当finally语句执行之前,JVM退出了,finally才不会执行:

package com.jh.exception;

public class FinallyTest02 {publicstaticvoidmain(String[] args){

        int i = m1();

        System.out.println(i);

    }

    publicstaticintm1(){

      try {

          int i = 1024;//try里面的变量在外部是无法被访问的          System.exit(0);//让jvm退出,所以finally中的语句不会执行          return i;

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            System.out.println("finally中的语句");

        }

      return 10;

      // System.out.println(i);无法访问i,因为i是在try中声明的    }

}


练习

1.下面程序的打印结果是什么?

package com.jh.exception;

public class FinallyTest03 {publicstaticvoidmain(String[] args){

        int i = m1();

        System.out.println(i);

    }

    publicstaticintm1(){

        int i = 10;

        try{

            return i;

        //这里没有catch,所以不用在后面写return了        }finally{

            i++;

            System.out.println("finally中的i=" + i);

        }

    }

}


2.final,finally和finalize的区别?


答案

1.程序在执行到return i时,会先将i赋给一个临时变量,return的是这个临时变量:int temp = i;return temp;,然后再执行finally中的语句,打印出了11,之后再执行main方法中的语句,打印出10。

2.这三个关键字其实没有什么关系,只不过在单词的拼写上面相似。

final

        final可以修饰类,不能被继承

        修饰方法,不能被重写

        修饰变量,只能赋值一次

finally是try语句中的一个语句体,不能单独使用,语句体中的语句一定会执行

finalize是Object中的一个方法,当没有引用指向这个对象时,由对象的垃圾回收器在回收之前调用此方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容