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

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,例如:空引用调用属性或方法时.

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搜集整理制作成chm格式文件,灰常给力 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。 对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 9、Collection 和 Collections的区别。   Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap和Hashtable的区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值