Java基础知识《Java程序员面试笔试宝典》--异常处理

一、finally块是何时运行的。

    1、在try块中return时,finally块是否会运行?

public class Test{
    public static void main(String[] args){
        int result = test();
        System.out.println(result);
    }

    public static void test(){
        try{
            return 1;
        }finally{            
            System.out.println("execute finally");
        }
    }
}

        结果:execute finally

                  1

        结论:finally块得到运行

    2、如果在finally块中return一个值,最终函数会返回哪个值?

        将code1中的finally块的代码更改为如下,运行结果为?

System.out.println("execute finally");
return 3;

        结果:execute finally

                  3

        结论:finally块中的return语句会覆盖别处的return语句。

    3、如果在finally块中改变返回值,将如何?

        1) 如果返回的变量是基本数据类型,finally中的改变对返回没有任何影响;

        2) 如果改变的是引用类型,将对返回对象造成改变;

        3) return返回时,不是直接返回,而是先复制一份,然后返回,这个复制不是深拷贝,因此在finally改变返回的对象之后,会造成对象的改变。

    4、什么情况下finally块不会被执行?

        1) 在进入try之前,程序异常;

        2) 在try中执行System.exit(0)强制退出。


二、运行时异常与普通异常

1、Java提供了两种异常类:Error、Exception;他们都继承于Throwable,前者(如OutOfMemoryError、ThreadDeath)不建议捕捉,因为这种错误会导致线程或者进程终止,一般是由逻辑错误造成的。

2、Exception表示可恢复异常,分为检查异常,和运行时异常。检查异常是编译时可以发现的,对于运行时异常,编译器没有强制性要去捕获处理。

3、常见运行时异常有:NullPointerException(空指针异常)、ClassCastException(类型转化异常)、ArrayIndexOutOfBoundsException(数组越界异常)、ArrayStoreException(数组存储异常)、BufferOverflowException(缓冲区溢出异常)、ArithmeticException(算数异常)。




猜你喜欢

转载自blog.csdn.net/qq_24888697/article/details/80790789