java的异常是一个面试高频问题,而且在学习java的时候也是一个基础而且重要的问题。这篇文章结合着面试问题对java的异常体系进行一个梳理。

1、体系梳理

Throwable 可以用来表示任何可以作为异常抛出的类,分为两种:Error 和 Exception。其中 Error 用来表示 JVM 无法处理的错误,Exception 又分为两种:

(1)受检异常 :需要用 try…catch… 语句捕获并进行处理,并且可以从异常中恢复;

(2)非受检异常 :是程序运行时错误,例如空指针异常。

图片


2、异常处理

对于不同的异常,java采用不同的异常处理方式:

(1)Error(错误):一般表示代码运行时JVM出现问题。比如NoClassDefFoundError等。比如说当jvm耗完可用内存时,将出现OutOfMemoryError。此类错误发生时,JVM将终止线程。

(2)运行异常将由系统自动抛出,应用本身可以选择处理或者忽略该异常。

(3)可查异常必须进行捕获或者抛出该方法之外交给上层处理。要么使用try-catch捕获,要么throws该异常。

3、面试题

(1)检查型异常和非检查型异常有什么区别

检查型异常和非检查型异常的主要区别在于其处理方式。检查型异常都需要使用try,catch 和finally 关键字在编译器进行处理,否则会出现编译器报错。对于非检查型异常则不需要这样做。Java中所有继承  Exception 的类的异常都是检查型异常,所有继承RuntimeException 的异常都被称为非检查型异常。
(2)error和exception有什么区别

这里主要是对概念的理解。error 表示恢复不是不可能但很困难的情况下的一种严重问题。exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

(3)final, finally, finalize的区别?

final是一个java关键字,用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。这个是在笔试当中常考的一个知识点。
finally是异常处理语句结构的一部分,表示finally里面的代码块一定会执行。。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。

(4)常见的异常

NullPointException:空指针异常,Jdk8里面可以用Optional对象来避免。

IndexOutOfBoundsException:数组下标越界。

NumberFormatException:数字类型转化异常。

ClassCastException:类型转换异常,发生在强转时。

FileNotFoundException:找不到指定文件。

ClassNotFoundException:在classpath中找不到引用的类缺乏引用当前类的jar或没有设置classpath或jar损坏-,找到jar并放入classpath中或检查jar是否损坏

OutOfMemoryError:内存溢出异常,增大初始化堆:-Xms 增加最大值:-Xmx

NoClassDefFoundError:找不到相应的类错误,缺乏当前引用类的jar或jar版本不对。ConcurrentModificationException:并发修改异常。

NoSuchMethodError:类里找不到相应的方法,一般是jar版本不对。

UnsupportedClassVersionError:版本不支持错误。

StackOverflowError:栈溢出错误,一般是函数的死循环。


更多相关文章

  1. JS内存泄漏排查方法
  2. Java中的泛型方法
  3. 从模版方法模式到 SPI 演变 :好的思想通用而持久
  4. 探寻泛型方法ClassCastException元凶
  5. 如何使用java语言求一个正整数的平方根?(自定义Sqrt方法)
  6. 设计模式之模板方法模式
  7. Java实现定时任务的三种方法
  8. Java 开发者写 SQL 时常犯的 10 个错误

随机推荐

  1. 详解PHP sprintf()格式化用法
  2. 通过PHP内置web服务器实现简单的调试应用
  3. PHP模拟supervisor的进程管理
  4. php.ini与phpinfo()的用处详解
  5. 详解 PHP 异步后台处理
  6. 5种PHP定义数组的方法
  7. 教你用php读取elf结构
  8. PHPer都应当掌握的注释标记!
  9. 总结一些php命令行下的常用命令
  10. 关于php curl异步并发请求http