finally的特点以及面试体

1,finally的特点
被finally控制的语句体一定会执行,特殊情况:在执行finally之前,jvm退出了,例如System.exit(0)
2,finally的作用
用于释放资源,在IO操作和数据库操作中会见到
3,finally相关的面试题
(1)final和finally的区别
final是关键字
final修饰的类不可以被继承,修饰的方法不可以被重写,修饰的变量只能被赋值一次。
(2)finally用于异常处理try…catch中,在一般情况下,finally控制的语句体一定会执行
4,如果catch里面有return语句,请问finally的代码还会执行吗?如果会请问是在return前还是在return后
此情况下,finally的代码还会执行,在return前执行
例如:
public class FinallyDemo {
public static void main(String[] args){

// method1();
int result=method2();
System.out.println(result);
}

/**
 * 编码原则:
 * 每个方法一定要有注释,每个方法尽量要有try...catch,名称书写规范
 */


public static void method1(){
    int[] array=null;
    try {
        array=new int[]{1,2,3};
        System.out.println(array[4]);
    }catch (Exception e){
        //记录异常
        e.printStackTrace();
    }finally {
        //finally语句块,不论是否发生异常,finally语句块都会执行到
        System.out.println("数组的长度"+array.length);


        //如果finally里面又发生了异常,同样可以try..catch

// try {
// int a=10;
// int b=0;
// int sun=a/b;
// }catch (ArithmeticException e){
//
// }

    }
    System.out.println("hello world");
}

public static int method2(){
    int result=0;
    int array[]=null;
    try{
        array=new int[]{1,2,3};
        System.out.println(array[3]);
    }catch (Exception e){
      e.printStackTrace();
      return 10;
    }finally {
        result =array.length;
        System.out.println("finally语句块被执行了");
    }
    return result;
}

}
5,请注意编码原则
每个方法一定要有注释,每个方法尽量使用try…catch形式,名称要书写规范
6,异常注意事项
(1)子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类
(2)如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
(3)如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

猜你喜欢

转载自blog.csdn.net/weixin_42981168/article/details/88058335