Java面试相关

java面试exception相关

2018-03-25  本文已影响0人  pr0metheus

面试题目一:

代码如下,问下面程序执行完毕后结果是什么?

public class ExceptionTest{

    public static void main(String[] args) {
        try {
            String s = null;
            return;
        } catch(Exception e){
            System.out.println("exception");
        } finally {
            System.out.println("finally");
        }
    }
}

答案:结果是输出finally,当try块执行到return的时候并不会立刻return而是会转向到finally块,等finally块执行完毕之后在进行return。

面试题目二:

代码如下,问下面的程序执行完毕后结果是什么?

public class ExceptionTest{

    public static int output() {
        try {
            String s = null;
            return 2;
        } catch(Exception e){
            System.out.println("exception");
        } finally {
            System.out.println("finally");
            return 4;
        }
        
    }

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

答案:执行结果是输出finally和4,当try块执行到return语句的时候会转向执行finally块,当finally块中也有return语句的时候就会以该return为最终的return。(猜测,具体也不知道原理)

面试题目三:

代码如下,问下面的程序执行完毕后结果是什么?

public class ExceptionTest{

    public static int output() {
        try {
            String s = null;
            System.exit(0);
        } catch(Exception e){
            System.out.println("exception");
        } finally {
            System.out.println("finally");
            return 4;
        }
        
    }

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

答案:控制台什么都没有输出,因为执行到System.exit(0)的时候就会结束虚拟机了,连程序都退出了,怎么可能还会输出。

笔试题目四:

代码如下,问下面的程序能否编译通过?

public class ExceptionTest {
    
    public void doSomething() throws ArithmeticException {
        System.out.println("do something");
    }
    
    public static void main(String[] args) {
        ExceptionTest test = new ExceptionTest();
        test.doSomething();
    }
}

答案:能够编译通过,因为doSomething方法抛出的是uncheckedException所以在main方法中调用该方法时并不需要对其进行处理。所以对于异常的处理具体还要看调用方法所抛出的异常类型.上述代码如果抛出的是IOException则就需要在main方法中进行try-cath或继续向JVM抛出异常,因为IOException是checkedException.

补充知识点:

笔试题目五:

代码如下,问下面的程序能否编译通过?

import java.io.IOException;
public class ExceptionTest {
    
    public void doSomething() throws IOException {
        System.out.println("do something");
    }
    
    public static void main(String[] args) {
        ExceptionTest test = new ExceptionTest();
        try {
            test.doSomething();
        } catch (Exception e) {
        } catch (IOException e) {
        }
        
    }
}

答案:编译通不过,IOException块无法到达,在try-catch代码块中当有匹配的catch时就会忽略后面所有的catch。所以在上述代码中Exception是所有异常的父类,一定会进入到该catch块,后面的IOException catch块就毫无意义了。在使用try-catch进行异常捕获的时候有一个原则就是:异常范围要从小到大的写

上一篇 下一篇

猜你喜欢

热点阅读