首页
学习
活动
专区
圈层
工具
发布

每日面试题推送及讲解-20190415

今日面试题

今天主要分享一些关于Java异常的常见面试问题,我们都应该明白使用异常要恰当合适,不可过分依赖异常,因为构造异常对象是比较耗时的。

  • 一个线程运行时发生异常会怎样?
  • 异常能代替简单的测试吗?为什么
  • 构造异常对象为什么会耗时
  • 异常可以不生成栈追踪信息吗?

上期面试题

每日面试题推送及讲解-20190410

面试题分析

第一题是关于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()方法

面试题答案

更详细完整的答案可以来小程序查看,如果不是最新的题目,大家可以使用题库的搜索功能.

下一篇
举报
领券