Java异常-面试必知

Java异常-面试必知

1. 什么是Java中的异常?

异常是指程序运行时(非编译时)所发生的非正常情况或错误
当程序违反了语义规则时,JVM就会将出现的错误表示成一个异常抛出,这个异常可以在catch程序中进行捕获,然后进行处理,异常处理的目的就是为了提高程序的安全性与鲁棒性(鲁棒性就是健壮性,在遇到异常还能正常工作,不至于死机)。

2. 异常的处理原理是什么?

Java语言把异常当作对象来处理,并定义了一个基类(java.lang.Throwable)作为所有异常的父类,Java API中定义了许多异常类,这些异常类分为Error(错误)和Exception(异常)两大类。

3. Error和Exception有什么区别?

Error表示在程序在运行期间出现的非常严重的错误,并且该错误是不可恢复的,由于这属于JVM层次的严重错误,因此这种错误会导致程序终止执行的,运行时异常多是由于逻辑错误导致的,是可以解决的,所以说一个正确的程序是不应该存在Error的,如(OutOfMemoryError 、ThreadDeath)等都属于错误,这些异常发生,JVM一般会选择将线程终止。
Exception表示可以恢复的异常,是编译器可以捕捉到的,它包含两种类型:检查异常(checked exception)和运行时异常(runtime exception)。

4. 检查异常与运行时异常(非检查异常)

检查异常:Java中所有继承 Exception 的类的异常都是检查型异常,发生在编译阶段,编译器强制程序去捕获此类异常,即把可能会出现这些异常的代码放到try块中,把对异常的处理的代码放到catch块中,这种异常一般在如下几种情况下使用:
(1)异常的发生并不会导致程序的错误,进行处理后可继续执行,例如:当数据库连接失败后,可以重新链接后进行操作。
(2)程序依赖不可靠的外部条件,例如系统IO
运行时异常:所有继承RuntimeException 的异常都被称为非检查型异常(运行时异常)。编译器没有强制程序去捕获并处理。出现运行时异常后,系统会把异常一直往上层抛出,知道遇到处理代码为止,如果是多线程就用Thread.run() 方法抛出,抛出之后这个线程也就退出了,如果是单线程,就用main()方法抛出,那么整个策划稿内需也就退出了,所以,如果不对运行时异常就行处理,后果非常严重,一旦发现要么线程终止,要么主程序终止。

5. 常见运行时异常

  • 空指针异常
NullPointerException
  • 类型强制转换异常
ClassCastException 
  • 数组越界异常
ArrayIndexOutOfBoundsException
  • 数组存储异常(向数组中存放与声明类型不兼容对象异常)
ArrayStoreException  
  • 缓冲区溢出异常
BufferOverflowException
  • 算术异常
ArithmeticException
  • 下标越界异常
 IndexOutOfBoundsException 
FileNotFoundException - 文件未找到异常
SQLException - 操作数据库异常
IOException - 输入输出异常

上面提到检查异常,异常处理放在catch块中,下面我们来介绍一下try-catch-finally-return执行顺序?

6. try-catch-finally-return执行顺序?

在Java语言的异常处理中,finally块的作用就是为了保证无论出现什么情况,finally块里的代码一定会被执行,finally块中的代码在return前执行,如果try-finally 或者 catch-finally中都有return,那么finally那么finally块中的return将会覆盖别处的return语句。最终返回调用者那里的是finally中return的值,
出现在Java代码中的finally块有两种情况不会被执行

(1)当程序在进入try语句之前就出现异常时,会直接结束掉。

(2)当程序在try块中强制退出时也不会去执行finally块中的代码。(try中调用System.exit(0))

7. final, finally, finalize的区别?

戳这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值