JAVA企业面试题精选 Java SE 11-20

来源:互联网 发布:淘宝导航条图片 编辑:程序博客网 时间:2024/06/05 01:09

3.11.Checked Exception 和Unchecked Exception是什么以及它们的区别?

参考答案:

  Checked Exception:这类异常都是Exception的子类.
  Unchecked Exception:Error 和 RuntimeException及其子类是Unchecked Exception.
  二者的区别在于,Unchecked Exception中的Error是Java自己的错误或者诸如内存耗尽等严重错误,是不可抗拒的,显然没有捕捉的必要,而且也没有办法捕捉.Unchecked Exception中的RuntimeException是你的程序有逻辑错误,是程序眼应该积极避免其出现的异常.比如NullPointerException等,完全是程序员马虎出的错.当遇到这种错误时,Java将这个错误自动捕捉到,比如显示到console里,然后继续运行.而Checked Exception如果不捕捉则会导致程序终止,Checked Exception是需要强制catch的异常,你在调用这个方法的时候,你如果不捕获这个异常,那么编译器就会报错,比如我们读写文件的时候会捕获IOException,执行数据库操作会捕获SQLException等.

3.12.在Java语言中,如何引发异常?对异常处理的两条途径是什么?

参考答案:

  在Java语言中,可以使用throw关键字来引发异常.
  对异常处理的两条途径为:
  1)使用throws抛出异常.
  2)使用try-catch语句捕获异常.

3.13.异常(Exception)分几种类型?有什么区别?写出几个常见异常(若记不得异常的英文名,写中文名亦可)

参考答案:

  异常(Exception)分为两类:运行时异常和非运行时异常.
  运行时异常和非运行时异常的区别是运行时异常(RuntimeException)又称为非检查一行,非运行时异常指的是检查异常.运行时异常是指直接或间接继承RuntimeException的异常.非运行时异常是指除了RuntimeException以外的其他异常,是你的程序有逻辑错误,程序员应该积极避免其出现的异常.Java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被补货的运行时异常.
  常见的运行时异常:
  1)NullPointerException(空指针异常):当操作一个空引用时会出现此异常.
  2)NumberFormatException(数字格式化异常):试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常.
  3)ClassCastException(类型转换异常):强制类型转换类型不匹配时出现此异常.
  4)ArrayIndexOutOfBoundException(数组下标越界异常):当使用一个不存在的数组下标时出现此异常.
  5)ArithmeticExcetion(数学异常):当出现异常的运算条件时出现此异常
  常见的非运行时异常:
  1)SQLException:提供关于数据库访问错的异常.
  2)IOException:当发生某种I/O异常时,抛出此异常.
  3)ClassNotFoundException:当应用程序试图使用Class类中的forName方法,loadClass方法时,抛出该异常.

3.14.Java中的异常处理机制的简单原理

参考答案:

  当Java程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2中情况,一种是Java类库内置的语义检查,例如:数组下标越界,会引发IndexOutOfBoundException;访问null的对象时会引发NullPointerException.另一种情况是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常, 并自由选择在何时用throw关键字引发异常.

3.15.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

参考答案:

  会执行,在return前执行.

3.16.当使用多个catch语句捕获多个异常时,Java规定捕获Exception的catch语句必须排在最后,如下所示:

try { ...... }catch (ClassCastException ex) { ...... }catch (NumberFormatException ex) { ...... }catch (Exception ex) { ...... }//此句必须放在最后!

为什么会有这个限制?谈谈你的理解

参考答案:

  Exception是异常的父类.如果没有把该语句catch(Exception ex){ …… }放在最后面,那么try块中产生的异常不可能被catch(Exception ex){ …… }之后的catch语句捕获,也就是说catch(Exception ex){ …… }之后的catch语句永远不会执行到.Java编译器不允许这样的情况,会出现编译错误,因此如果要捕获的异常有继承关系,则子类在前,父类在后.

3.17.Java语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

参考答案:

  Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口.在Java中,每个异常都是一个对象,它是Throwable类或其他子类的实例.当一个方法出现异常后便抛出一个异常对象,该对象中包含了异常信息,调用这个对象的方法可以捕获到这个异常进行处理.Java的异常处理是通过5个关键词来实现的:try,catch,throw,throws和finally.
  try用来制定一块预防所有”异常”的程序;catch字句紧跟在try块后面,用来制定你想要捕捉的”异常类型;
  throw语句用来明确的抛出一个”异常”;
  throws用来表明一个成员方法可能抛出的各种”异常”;
  finally为确保一段代码不管发生什么”异常”都被执行一段代码;
  可以在一个成员方法调用的外面写一个try语句,这个成员方法内部写另一个try语句保护其他代码.每当遇到一个try语句,”异常”的框架放到堆栈上面,直到所有的try语句都完成.如果下一级的try语句没有对某种”异常”进行处理,堆栈就会展开,直到遇到有处理这种”异常”的try语句.

3.18.final,finally,finalize的区别?

参考答案:

  final 是一个修饰符.如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为abstract,又被声明为final;将变量或方法声明为final,可以保证它们在使用中不被改变;被声明为final的变量必须在声明时给定初值,而在以后的引用中只能被读取,不可修改;被声明为final的方法也同样只能使用,不能重载.
  finally 用在异常处理时提供finally块来执行任何清除操作;如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话).
  finalize 是方法名,Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作.这个方法是由垃圾收集器在确定这个对象没有被引用时堆这个对象调用的.它是在Object类中定义的,因此所有的类都继承了它.子类覆盖finalize()方法以整理系统资源或者执行其他清理工作.

3.19.阐述一下IndexOutOfBoundException通常在什么情况下发生

参考答案:

  指示某排序索引(例如对数组,字符串等)超出范围时抛出.例如:当使用一个不存在的数组下标时出现出现ArrayIndexOutOfBoundException.

3.20.阐述一下NullPointerException通常在什么情况下发生

参考答案:

  通常在操作一个空引用时会产生NullPointerException,例如:空引用调用属性或方法时.