动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

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

06-16 17:23 586浏览
举报 T字号
  • 大字
  • 中字
  • 小字

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

 1、Java中异常分为哪些种类?

答:按照异常需要处理的时机分为编译时异常也叫CheckedException 和运行时异常(也叫非受控异常)也叫UnCheckedException。Java认为Checked异常都是可以被处理的异常,所以Java程序必须显式处理Checked异常。如果程序没有处理Checked 异常,该程序在编译时就会发生错误无法编译。这体现了Java 的设计哲学:没有完善错误处理的代码根本没有机会被执行。对Checked异常处理方法有两种:

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

运行时异常只有当代码在运行时才发行的异常,编译的时候不需要try…catch。Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。

2、final、finally、finalize 的区别?

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

3、error和exception的区别?

答:Error类和Exception类的父类都是Throwable类,区别有如下三点:(1)Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止;(2)Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常;(3)Exception类又分为未检查异常(UnCheckedException)和受检查的异常(CheckedException)。运行时异常ArithmeticException,IllegalArgumentException编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用 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.}

答:代码走到第3行的时候遇到了一个MathException,这时第4行的代码就不会执行了,代码直接跳转到catch语句中,走到第 6 行的时候,异常机制有一个原则:如果在catch中遇到了return或者异常等能使该函数终止的话那么有finally就必须先执行完finally代码块里面的代码然后再返回值。因此代码又跳到第8行,可惜第8行是一个return语句,那么这个时候方法就结束了,因此第6行的返回结果就无法被真正返回。如果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 Error是 java.lang.VirtualMachineError 的子类,当 JVM 堆内存不足时,它会被 JVM 抛出。我们可以通过修改 java 选项提供更多内存来解决此错误。

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

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

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

1人推荐
共同学习,写下你的评论
0条评论
海纳百川
程序员海纳百川

2篇文章贡献16075字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消