https://blog.csdn.net/qq_36523638/article/details/79363652

1) Java中的检查型异常和非检查型异常有什么区别?

这又是一个非常流行的Java异常面试题,会出现在各种层次的Java面试中。检查型异常和非检查型异常的

主要区别在于其处理方式。检查型异常需要使用try, catch和finally关键字在编译期进行处理,否则会出现编译

器会报错。对于非检查型异常则不需要这样做。Java中所有继承自java.lang.Exception类的异常都是检查型

异常,所有继承自RuntimeException的异常都被称为非检查型异常。你也可以查看下一篇文章来了解

更多关于检查型异常和非检查型异常之间的区别。

2)Java中什么是Exception?

这个问题经常在第一次问有关异常的时候或者是面试菜鸟的时候问。我从来没见过面高级或者资深工程师的

时候有人问这玩意,但是对于菜鸟,是很愿意问这个的。简单来说,异常是Java传达给你的系统和程序错误的方

式。在java中,异常功能是通过实现比如Throwable,Exception,RuntimeException之类的类,然后还有一

些处理异常时候的关键字,比如throw,throws,try,catch,finally之类的。 所有的异常都是通过Throwable

衍生出来的。Throwable把错误进一步划分为 java.lang.Exception 和 java.lang.Error.  java.lang.Error 用

来处理系统错误,例如java.lang.StackOverFlowError 或者 Java.lang.OutOfMemoryError 之类的。然后

Exception用来处理程序错误,请求的资源不可用等等。

3)在Java异常处理的过程中,你遵循的那些最好的实践是什么?

这个问题在面试技术经理是非常常见的一个问题。因为异常处理在项目设计中是非常关键的,所以精通异常处

理是十分必要的。异常处理有很多最佳实践,下面列举集中,它们提高你代码的健壮性和灵活性:

1) 调用方法的时候返回布尔值来代替返回null,这样可以 NullPointerException。由于空指针是java异常里最恶

心的异常。

2) catch块里别不写代码。空catch块是异常处理里的错误事件,因为它只是捕获了异常,却没有任何处理或者

提示。通常你起码要打印出异常信息,当然你最好根据需求对异常信息进行处理。

3)能抛受控异常(checked Exception)就尽量不抛受非控异常(checked Exception)。通过去掉重复的异常处

理代码,可以提高代码的可读性。

4) 绝对不要让你的数据库相关异常显示到客户端。由于绝大多数数据库和SQLException异常都是受控异常,在Java中,

你应该在DAO层把异常信息处理,然后返回处理过的能让用户看懂并根据异常提示信息改正操作的异常信息。

5) 在Java中,一定要在数据库连接,数据库查询,流处理后,在finally块中调用close()方法。

4) Java中的NullPointerException和ArrayIndexOutOfBoundException之间有什么相同之处?

在Java异常面试中这并不是一个很流行的问题,但会出现在不同层次的初学者面试中,用来测试应聘者对检查

型异常和非检查型异常的概念是否熟悉。顺便说一下,该题的答案是,这两个异常都是非检查型异常,都继承自RuntimeException。该问题可能会引出另一个问题,即Java和C的数组有什么不同之处,因为C里面的数组是没有

大小限制的,绝对不会抛出ArrayIndexOutOfBoundException。

5) 既然我们可以用RuntimeException来处理错误,那么你认为为什么Java中还存在检查型异常?

这是一个有争议的问题,在回答该问题时你应当小心。虽然他们肯定愿意听到你的观点,但其实他们最感兴

趣的还是有说服力的理由。我认为其中一个理由是,存在检查型异常是一个设计上的决定,受到了诸如C++等比

Java更早的编程语言设计经验的影响。绝大多数检查型异常位于java.io包内,这是合乎情理的,因为在你请求了

不存在的系统资源的时候,一段强壮的程序必须能够优雅的处理这种情况。通过把IOException声明为检查型异

常,Java 确保了你能够优雅的对异常进行处理。另一个可能的理由是,可以使用catch或finally来确保数量受限

的系统资源(比如文件描述符)在你使用后尽早得到释放。

6)  throw 和 throws这两个关键字在java中有什么不同?

一个java初学者应该掌握的面试问题。 throw 和 throws乍看起来是很相似的尤其是在你还是一个java初学者的时

候。尽管他们看起来相似,都是在处理异常时候使用到的。但在代码里的使用方法和用到的地方是不同的。throws

总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常, 你也可以申明未检查的异常,但这不是编译

器强制的。如果方法抛出了异常那么调用这个方法的时候就需要将这个异常处理。另一个关键字  throw 是用来

抛出任意异常的,按照语法你可以抛出任意 Throwable (i.e. Throwable 或任何Throwable的衍生类) , throw

可以中断程序运行,因此可以用来代替return . 最常见的例子是用 throw 在一个空方法中需要return的地方抛出 UnSupportedOperationException 代码如下 :

1     private static voidshow() {

2          throw new UnsupportedOperationException(“Not yet implemented”);

3      }

7) 什么是“异常链”?

“异常链”是Java中非常流行的异常处理概念,是指在进行一个异常处理时抛出了另外一个异常,由此产生

了一个异常链条。该技术大多用于将“ 受检查异常” ( checked exception)封装成为“非受检查异常”

(unchecked exception)或者RuntimeException。顺便说一下,如果因为因为异常你决定抛出一个新的异常,

你一定要包含原有的异常,这样,处理程序才可以通过getCause()和initCause()方法来访问异常最终的根源。

8) 你曾经自定义实现过异常吗?怎么写的?

很显然,我们绝大多数都写过自定义或者业务异常,像AccountNotFoundException。在面试过程中询问

这个Java异常问题的主要原因是去发现你如何使用这个特性的。这可以更准确和精致的去处理异常,当然这也跟

你选择checked 还是unchecked exception息息相关。通过为每一个特定的情况创建一个特定的异常,你就为

调用者更好的处理异常提供了更好的选择。相比通用异常(general exception),我更倾向更为精确的异常。大

量的创建自定义异常会增加项目class的个数,因此,在自定义异常和通用异常之间维持一个平衡是成功的关键。

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

这是最近新出的Java异常处理的面试题。JDK7中对错误(Error)和异常(Exception)处理主要新增加了2个特性,

一是在一个catch块中可以出来多个异常,就像原来用多个catch块一样。另一个是自动化资源管理(ARM), 也称为

try-with-resource块。这2个特性都可以在处理异常时减少代码量,同时提高代码的可读性。对于这些特性了解,

不仅帮助开发者写出更好的异常处理的代码,也让你在面试中显的更突出。我推荐大家读一下Java 7攻略,这样

可以更深入的了解这2个非常有用的特性。

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

这个面试题会在面试高级程序员的时候用,面试官想知道你是怎么处理这个危险的OutOfMemoryError错误的。

必须承认的是,不管你做什么项目,你都会碰到这个问题。所以你要是说没遇到过,面试官肯定不会买账。要是

你对这个问题不熟悉,甚至就是没碰到过,而你又有3、4年的Java经验了,那么准备好处理这个问题吧。在回答

这个问题的同时,你也可以借机向面试秀一下你处理内存泄露、调优和调试方面的牛逼技能。我发现掌握这些技

术的人都能给面试官留下深刻的印象。

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块。

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

01     public static void start() throws IOException, RuntimeException{

02

03        throw new RuntimeException(“Not able to Start”);

04     }

05

06     public 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”的编译错误原因。

---------------------

作者:东风削铁虫

来源:CSDN

原文:https://blog.csdn.net/qq_36523638/article/details/79363652?utm_source=copy

版权声明:本文为博主原创文章,转载请附上博文链接!

java异常面试_java中异常的面试相关推荐

  1. java 异常 理解_java中的异常理解

    java异常是java提供的用于处理程序中错误的一种机制. 所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在). 设计良好地程序应该在程序异常发生时提 ...

  2. java 文件解析异常_java中异常的解析

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

  3. java 异常 日志_java中的异常、断言、日志(一)

    1.Java异常处理i.异常的概念和Java里面的异常体系结构1)基本概念:程序中的异常,一般成为例外情况,可以理解为是非正常情况,其他编程语言里面也有这样的情况,Java里面同样存在这样一个体系结构 ...

  4. java中异常的定义_java中异常的理解

    Trowable是所有异常的超类,对应的底下有两个子类,Error和Exception,java中的异常其实总体上来说有三种类型: 一.检查性异常,程序在编译的时候出现的异常,例如打开一个文件,此时程 ...

  5. java代码抛出异常_Java中编写代码出现异常,如何抛出异常,如何捕获异常

    异常的产生过程解析 先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundsException.我们通过图解来解析下异常产生的过程. 工具类 classArrayTools ...

  6. java 异常 中文_Java中所有的运行时异常,带中文解释

    展开全部 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:Negat ...

  7. python类型转换异常捕捉_Java中的异常

    异常的概念: 异常(exception也称例外)就是在程序运行过程中所发生的不正常的事情, 他会终止程序的运行. 1.所需的文件找不着 2.网络连接不通或者中断 3.算数运算符的错误参数 4.数组下标 ...

  8. java 运行异常处理_Java编程异常处理和I/O流

    重点: 1.在编写程序时,要正确地使用捕获例外和声明抛出异常的两种例外处理的方法. 2.遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流. 3.正确使用对象串行化的 ...

  9. java 异常限制_java的异常限制

    class Exception1 extends Exception{} class Exception2 extends Exception{} class Exception3 extends E ...

最新文章

  1. CloudCompare基础教程(1)-介绍
  2. 【微信小程序企业级开发教程】生命周期和app对象详解
  3. 第三章 Redis/SSDB+Twemproxy安装与使用
  4. 如何查看某个ABAP user针对某个authorization object的assignment status
  5. hibernate.cfg.xml的一些事
  6. 分枝定界法解0/1背包问题
  7. Hadoop HBase概念学习系列之hbase shell中执行java方法(高手必备)(二十五)
  8. stringWithUTF8String return null (返回null)的解决办法
  9. wdr5600 虚拟服务器,TP-Link WDR5600路由器端口映射设置教程
  10. 雅虎相册批量下载v3.0 公布!支持相册主人登录 欢迎大家试用
  11. 深度理解CNN中的感受野(大杀器)
  12. 锤子手机Android auto,分享锤子手机Smartisan OS的几个使用小技巧,效率更高
  13. 通信协议学习-485通信(2)
  14. 使用NPOI设置Excel表的单元格背景颜色
  15. 连线杂志:盖茨53年人生大事记
  16. 晋城一中oj 议员秘密
  17. echarts 折线图 折现颜色修改、点颜色修改、栅格去除
  18. 2022上海市安全员C证考题模拟考试平台操作
  19. 三维点云:PCA(下)open3d
  20. 通达oa php冲突,通达OA某版本系统存在通用SQL注入(附注射技巧)

热门文章

  1. Convex Formulation for Learning from Positive and Unlabeled Data
  2. day10【缓冲流、转换流、序列化流、打印流】
  3. 中俄博览会谈下大单 云从科技“展”露头角
  4. 今天睡眠质量记录74分
  5. oracle中ip带转数字,【PL/SQL】IP与数字互转
  6. Python中字符串的驻留机制和常用方法
  7. 单反相机的照片删了如何恢复
  8. 研发侧利器!k3d+k3s,轻松管理本地k3s集群!
  9. 最新实用Python异步爬虫代理池(开源)
  10. UE4 学习记录八 给场景中添加背景音乐和动画音效,运动加速效果