今天主要分享一些关于Java异常的常见面试问题,我们都应该明白使用异常要恰当合适,不可过分依赖异常,因为构造异常对象是比较耗时的。
上期面试题
第一题是关于Java中Throwable的问题,Throwable分为Exception和Error,出现Error的情况下,程序会停止运行。Exception分为RuntimeException和非运行时异常。非运行时异常必须处理,比如thread中sleep()时,必须处理InterruptedException异常,才能通过编译,而RuntimeException可以处理也可以不处理,因为编译并不能检测该类异常,比如NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException等。
第二题很明细答案是不能,通常来说简单的业务测试,我们更应该使用判断的形式去处理,比如说某一行代码可能会存在空指针的情况,这个时候我们应该去判断对象是否为Null,而不应该依赖try-catch去捕获处理
第三题需要我们对Java异常结构有一定认识,当我们构造一个异常对象的时候会调用父类Throwable的fillInStackTrace()方法去生成栈追踪信息,这个方法以独占锁的形式去操作,所以比较耗时。但是我们需要知道,在一般的业务和应用中,只要异出现不是特别频繁,实际运行速度慢并不会有很明显的表现,因为运行速度往往都纳秒级的速度,此外Java对于锁也有一定的优化。
第四题是基于第二题基础上的问题,既然异常耗时是发生在父类Throwable的fillInStackTrace()上,那么我们可以通过自定义异常类来做到不调用fillInStackTrace()方法
面试题答案
更详细完整的答案可以来小程序查看,如果不是最新的题目,大家可以使用题库的搜索功能.