当前位置: 首页 > 图灵资讯 > 技术篇> Java异常处理常考面试题有哪些(附答案)

Java异常处理常考面试题有哪些(附答案)

来源:图灵教育
时间:2023-04-10 17:24:31

  前面的很多文章总结整理了很多Java面试题,Java基础面试题,经常考各种类型的面试题,今天给大家Java程序员整理出来的面试题是Java异常处理面试问题,毕竟,许多程序员每天最大的心痛是“error”和“404错误”说到这里,一定有很多“感同身受”朋友们。那么话不多说,Java处理常考面试题异常的答案如下。

  1、Java中异常有哪些类型?

  答:根据异常需要处理的时间分为编译异常,也称为编译异常CheckedException 而且运行时异常(也称非控制异常)也叫UncheckedException。Java认为Checked异常是可以处理的异常,因此Java程序必须显式处理Checked异常。如果程序没有处理Checkeded 异常情况下,编译过程中会出现错误,无法编译。这体现了Java 设计理念:没有完美的错误处理代码就没有机会执行。处理Checked异常有两种方法:

  第一种:如果当前方法知道如何处理异常,则使用try...catch块用于处理异常。第二种:如果当前方法不知道如何处理,则在定义该方法时声明抛出异常。

  只有当代码运行时,才会发行异常运行,编译时不需要try…catch。Runtime,如除数为0,数组下标越界,经常处理麻烦。如果显示声明或捕获,将对程序的可读性和运行效率产生很大影响。因此,系统将自动检测并将其交给缺失的异常处理程序。当然,如果您有处理要求,您也可以显示并捕获它们。

  2、final、finally、finalize 的区别?

  答:final:用于声明属性、方法和类别,分别表示属性不可变,方法不可覆盖,修改类别不可继承; finally:语句结构异常处理的一部分,意味着总是执行;finalize:Object 一种类型的方法,所以Java对象都有这种方法,当Java对象没有更多的引用指向时,就会被垃圾回收器回收,垃圾回收器负责调用该方法,通常在该方法中进行回收前的准备。该方法更像是对象生命周期的临终方法。当该方法被系统调用时,代表对象即将到来“死亡”,但需要注意的是,我们主动调用这种方法并不会导致对象“死亡”,这是一种不需要我们调用的被动方法(实际上是回调方法)。

  3、error和exception的区别?

  答:Eror类和Exception类都是Throwable类,区别如下:(1)Eror类一般是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、内存空间不足、方法调用栈溢出等。对于由此类错误引起的应用程序中断,只有程序本身无法恢复和预防。如果出现此类错误,建议终止程序;(2)Exception表示程序可以处理的异常,可以捕获和恢复。遇到此类异常,应尽可能处理异常,使程序恢复运行,而不是随意终止异常;(3)Exception分为未检查异常(UnCheckedException)和异常检查(CheckedException)。Arithmeticexception、Illlegalargumentexception编译可以通过,但一旦操作终止,程序不会处理操作异常,这种异常,程序将终止。被检查的异常可以使用 try…catch 捕获,或用throws字句声明抛出,交给其父类处理,否则编译不会通过。

  4、调用以下方法,获得的返回值是什么?1. public int getNum() { 2. try { 3. int a = 1 / 0; 4. return 1; 5. } catch (Exception e) { 6. return 2; 7. } finally { 8. return 3; 9. } 10.}

  答:代码到第当第三行遇到Mathexception时,第四行的代码将不会执行,代码将直接跳转到catch语句中 6 行的时候,异常机制有一个原则:如果在catch中遇到return或异常可以终止函数,那么finally必须在返回值之前执行finally代码块中的代码。所以代码又跳到了第八行,可惜第八行是return语句,所以这个时候方法就结束了,所以第六行的返回结果不能真正返回。如果finally只是处理一个释放资源的操作,那么问题的最终返回结果是2。因此,上述返回值为3。

  5、throw 和 throws 有什么区别?

  答:(1)throw:throw 语句用于方法体内,表示抛出异常,由方法体内的语句处理;throw是一个特定的向外抛出异常的动作,所以它抛出了一个异常的例子,执行throw必须抛出某种异常;(2)throws:方法声明后面使用throws语句,表示如果抛出异常,该方法的调用者进行异常处理;throws主要声明该方法抛出某种类型的异常,以便用户知道需要捕获的异常类型;(3)throws表示异常的可能性,不一定发生。

  6、Java 对异常处理机制的理解是什么?

  答:Java对异常进行了分类,不同类型的异常用不同的Java类表示,所有异常的根类都是 java.lang.Throwable,Throwable下有两个子类:Error和Exception。

  Error表示,应用程序本身无法克服和恢复的严重问题;Exception表示,该程序还可以克服和恢复问题,分为系统异常和普通异常。

  系统异常是由软件本身的缺点引起的问题,即软件开发人员考虑不当,软件用户无法克服和恢复这个问题,但在这个问题下,软件系统可以继续运行或使软件死亡,例如,数组标记越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException)。

  普通异常是由运行环境的变化或异常引起的问题,是用户可以克服的问题。例如,网络断开,硬盘空间不够,程序不应该死亡。

  Java为系统异常和普通异常提供了不同的解决方案,编译器必须try才能强制普通异常..catch处理或使用throws声明继续抛给上层调用处理,因此常见的异常也称为checked异常,系统异常可以处理或不处理,因此编译器不强制使用try..catch处理或使用throws声明,因此,系统异常也称为unchecked异常。

  7、如何处理项目中的异常?

  答:(1)尽量避免runtimeException 。例如,对于可能出现空指针的代码,在使用对象之前,我们必须判断对象是否为空。如有必要,runtimeException也是try catch处理。

  (2)try 在处理catch时,应在catch代码块中记录异常信息,并通过调用异常类的相关方法获取异常相关信息并返回web端。它不仅应该给用户良好的用户体验,还应该帮助程序员定位异常的位置和原因。

  8、如何用 Java 异常编写自定义?

  答:我们可以扩展Exception或其任何子类创建我们的自定义异常类。自定义异常类可以有自己的变量和方法,可以用来将错误代码或其他与异常相关的信息传递给异常处理程序。

  9、什么是 Java 中的Out Of Memory Error?

  答:Java 中的 Out Of Memory Eror是 java.lang.VirtualMachineError 的子类,当 JVM 当堆内存不足时,它就会被覆盖 JVM 抛出。我们可以通过修改 java 为了解决这个错误,选项提供更多的内存。

  10、我们能有一个空的捕获块吗?

  答:我们可以有一个空的catch块,但这是最糟糕的编程例子。永远不要有空 catch 块,因为如果异常被块捕获,我们将没有关于异常的信息,调试它将是一场噩梦。在控制台或日志文件中记录异常详细信息至少应有一个日志记录句。

  上面这10道题是今天我们Java面试题异常处理的常见面试题。希望大家能学会这10道题,在看参考答案的同时加入自己的思考,学习效果会更好。Java程序员除了学习和工作之外,还可以在线在Java培训网站上观看Java学习课程,里面不仅有Java异常处理有更全面的知识,有很多数据结构,框架,java多线程系列课程供大家学习,帮助大家学习在Java面试中脱颖而出。