美文网首页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