美文网首页Java面试相关
java面试exception相关

java面试exception相关

作者: pr0metheus | 来源:发表于2018-03-25 14:40 被阅读0次

面试题目一:

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

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.

补充知识点:

  • 处理异常的手段:1.try-catch 2. 继续向上抛出
  • java异常分为checkedException与uncheckedException(也称为runtimeException)
  • java允许我们对于uncheckedException进行try-catch或抛出,也允许我们不对其进行任何处理

笔试题目五:

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

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进行异常捕获的时候有一个原则就是:异常范围要从小到大的写

相关文章

网友评论

    本文标题:java面试exception相关

    本文链接:https://www.haomeiwen.com/subject/nkwhcftx.html