面试题十八:Java高级面试 —— 异常

it2022-05-05  142

目录

一、异常体系

二、异常使用

1、运用Java异常处理机制

2、异常处理的原理

3、异常流程的运行过程

三、一些异常的面试题

1、Java中的检查型异常和非检查型异常有什么区别?

2、throw和throws这两个关键字在java中有什么不同?

3、如果执行finally代码块之前方法返回了结果,或者JVM退出了,finally块中的代码块还会执行吗?

4、Java中final,finalize,finally关键字的区别?


一、异常体系

error/Exception error:是指程序无法处理的错误,例如oom Exception:程序可以处理的,分为运行时异常(RuntimeException)和非运行时异常

二、异常使用

1、运用Java异常处理机制

a、tyr...catch语句b、finally语句:任何情况下都必须执行的代码c、throws子句:声明可能会出现的异常d、throws语句:抛出异常

2、异常处理的原理

a、Java虚拟机用方法调用栈(method invocation stack)来跟踪每个线程中一系列的方法调用过程b、如果在执行方法的过程中抛出异常,则Java虚拟机必须找到能捕获该异常的catch代码块c、当Java虚拟机追溯到调用栈的底部的方法时,如果仍然没有找到处理该异常的代码块,此时按照两个步骤处理:第一是打印来自该方法调用栈的异常信息,二是判断该线程是否是主线程,如果不是,就终止该线程,其他线程继续运行。

3、异常流程的运行过程

有四种场景 a、第一种场景:finally语句不被执行的唯一情况就是先执行了用于终止程序的System.exit()方法 b、第二种场景:return语句用于退出本方法 c、第三种场景:finally代码块虽然return语句之前就被执行,但finally代码块不能通过重新给变量赋值的 方式改变return语句的返回值 d、第四种场景:建议不要在finally代码块中使用return语句

三、一些异常的面试题

1、Java中的检查型异常和非检查型异常有什么区别?

java异常—检查异常(checked exception)和未检查异常(unchecked exception)

检查型异常(CheckedException) 在Java中所有不是RuntimeException派生的Exception都是检查型异常。当函数中存在抛出检查型异常的操作时该函数的函数声明中必须包含throws语句。调用改函数的函数也必须对该异常进行处理,如不进行处理则必须在调用函数上声明throws语句。

检查型异常是JAVA首创的,在编译期对异常的处理有强制性的要求。在JDK代码中大量的异常属于检查型异常,包括IOException,SQLException等等。

非检查型异常(UncheckedException) 在Java中所有RuntimeException的派生类都是非检查型异常,与检查型异常对比,非检查型异常可以不在函数声明中添加throws语句,调用函数上也不需要强制处理。 常见的NullPointException,ClassCastException是常见的非检查型异常。非检查型异常可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。

2、throw和throws这两个关键字在java中有什么不同?

3、如果执行finally代码块之前方法返回了结果,或者JVM退出了,finally块中的代码块还会执行吗?

4、Java中final,finalize,finally关键字的区别?


最新回复(0)