设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

Java的Exception和Error面试题10问10答

2013-10-12 11:40| 发布者: 红黑魂| 查看: 1646| 评论: 0|来自: 开源中国编译

摘要:   在Java核心知识的面试中,你总能碰到关于处理Exception和Error的面试题。Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它成为面试题中的常客。关于Java中Err ...

9) JDK7中对异常处理做了什么改变?


  这是最近新出的Java异常处理的面试题。JDK7中对错误(Error)和异常(Exception)处理主要新增加了2个特性,一是在一个catch块中可以出来多个异常,就像原来用多个catch块一样。另一个是自动化资源管理(ARM), 也称为try-with-resource块。这2个特性都可以在处理异常时减少代码量,同时提高代码的可读性。对于这些特性了解,不仅帮助开发者写出更好的异常处理的代码,也让你在面试中显的更突出。我推荐大家读一下Java 7攻略,这样可以更深入的了解这2个非常有用的特性。


10) 你遇到过 OutOfMemoryError 错误嘛?你是怎么搞定的?


  这个面试题会在面试高级程序员的时候用,面试官想知道你是怎么处理这个危险的OutOfMemoryError错误的。必须承认的是,不管你做什么项目,你都会碰到这个问题。所以你要是说没遇到过,面试官肯定不会买账。要是你对这个问题不熟悉,甚至就是没碰到过,而你又有3、4年的Java经验了,那么准备好处理这个问题吧。在回答这个问题的同时,你也可以借机向面试秀一下你处理内存泄露、调优和调试方面的牛逼技能。我发现掌握这些技术的人都能给面试官留下深刻的印象。你们也可以到 how to fix java.lang.OutOfMemoryError去看看我写的另一篇关于这个问题更详细细节的文章


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


  这个问题也可以换个方式问:“如果在try或者finally的代码块中调用了System.exit(),结果会是怎样”。了解finally块是怎么执行的,即使是try里面已经使用了return返回结果的情况,对了解Java的异常处理都非常有价值。只有在try里面是有System.exit(0)来退出JVM的情况下finally块中的代码才不会执行。


12)Java中final,finalize,finally关键字的区别


  这是一个经典的Java面试题了。我的一个朋友为Morgan Stanley招电信方面的核心Java开发人员的时候就问过这个问题。final和finally是Java的关键字,而finalize则是方法。final关键字在创建不可变的类的时候非常有用,只是声明这个类是final的。而finalize()方法则是垃圾回收器在回收一个对象前调用,但也Java规范里面没有保证这个方法一定会被调用。finally关键字是唯一一个和这篇文章讨论到的异常处理相关的关键字。在你的产品代码中,在关闭连接和资源文件的是时候都必须要用到finally块。更多看here


13)下面的代码都有哪些错误:

01public static void start() throws IOException, RuntimeException{
02 
03   throw new RuntimeException("Not able to Start");
04}
05 
06public static void main(String args[]) {
07   try {
08         start();
09   catch (Exception ex) {
10           ex.printStackTrace();
11   catch (RuntimeException re) {
12           re.printStackTrace();
13   }
14}


  这段代码会在捕捉异常代码块的RuntimeException类型变量“re”里抛出编译异常错误。因为Exception是RuntimeException的超类,在start方法中所有的RuntimeException会被第一个捕捉异常块捕捉,这样就无法到达第二个捕捉块,这就是抛出“exception java.lang.RuntimeException has already been caught”的编译错误原因。


14)下面的Java代码都有哪些错误:


01public classSuperClass { 
02    public void start() throws IOException{
03        throw new IOException("Not able to open file");
04    }
05}
06 
07public class SubClass extendsSuperClass{ 
08    public void start() throws Exception{
09        throw new Exception("Not able to start");
10    }
11}


  这段代码编译器将对子类覆盖start方法产生不满。因为每个Java中方法的覆盖是有规则的,一个覆盖的方法不能抛出的异常比原方法继承关系高。因为这里的start方法在超类中抛出了IOException,所有在子类中的start方法只能抛出要么是IOExcepition或是其子类,但不能是其超类,如Exception。


15)下面的Java异常代码有什么错误:

01public static void start(){
02   System.out.println("Java Exception interivew question Answers for Programmers");
03}
04 
05public static void main(String args[]) {
06   try{
07      start();
08   }catch(IOException ioe){
09      ioe.printStackTrace();
10   }
11}


  上面的Java异常例子代码中,编译器将在处理IOException时报错,因为IOException是受检查异常,而start方法并没有抛出IOException,所以编译器将抛出“异常, java.io.IOException 不会在try语句体中抛出”,但是如果你将IOException改为Exception,编译器报错将消失,因为Exception可以用来捕捉所有运行时异常,这样就不需要声明抛出语句。我喜欢这样带有迷惑性的Java异常面试题,因为它不会让人轻易的找出是IOException还是Exception。你也可以在 Joshua Bloach和Neil Gafter的Java谜题中找到一些有关Java错误和异常的具有迷惑性问题。


  我也经常看到在一些新人和有经验的Java面试者遇到有关Java错误和异常的面试题。当然还有很多有关异常的问题我没有涉及到,如果你有一些好的问题,请告诉我,我将尽力在这个java异常问答系列中收录这些问题。还有最后一个我留给伙伴们的问题是“为什么Java异常被认为是比返回错误代码要好”,告诉我你对于这里的Java异常面试问答系列有什么想法。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部