谈谈你对异常的理解(高频面试题)

Posted 小布丁value

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈你对异常的理解(高频面试题)相关的知识,希望对你有一定的参考价值。

1.异常概述

定义

  • 异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)

分类

Error

  • Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源
    耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性 的代码进行处理。

StackOverflowError

OutOfMerroryError

Exception

编译期异常

java源程序经过javac.exe编译生成字节码文件的过程

  • FileNotFoundException
  • IOException
  • ClassNotFoundException

运行期异常

字节码文件通过java.ext加载到jvm的过程

  • ArrayIndexOutofBoundsEXception
  • NullpointerException(数组或链表)
  • ClassCastException 类型强转异常
  • inputMismatException 输入类型异常
  • ArithmeticException 算数异常
  • NumberFormatException 数值转换异常



2.继承的角度谈异常的体系结构

3.异常处理机制

try…catch…finally

try

语句执行过程中有可能出现的异常

catch

功能

  • 处理该异常的代码块
  • 在 catch 块中是对异常对象进行处理的代码,与访问其它对象一样,可以访问一个异 常对象的数据成员或调用它的方法。

方法

  • getMessage( )是类 Throwable 所提供的方法,用来得到有关异常事件的信息
  • Throwable还提供了方法 printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。

异常捕获顺序

铺货异常顺序和catch与语句的顺序有关,
捕获到一个异常时,剩下的catch语句就不再进行匹配.
所以在安排catch语句的执行顺序时,一般
先安排子类,在安排父类

finally(可选)

  • 无论是否发生异常,finally代码块中的代码总会被执行

  • 在碰到return 语句时,finally代码块将在方法返回之前被执行
  • 在以下四种特殊形况下
  • finally代码块不会被执行
  • 1.finally语句块中发生了异常
  • 2.在前面代码块中使用System.exit() 退出程序。
  • 3.程序所在的线程死亡
  • 4.关闭CPU

.像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的
释放。此时的资源释放,就需要声明在finally中。


注意一个点:如果用try catch处理异常,jvm一旦捕获到异常,程序就停止了
博主犯的错误

throws

“throws +异常类型” 卸载方法的声明处,指明此方法执行时,可能会抛出的异常类型。
注意:一旦当方法体执行时,出现异常,仍会在异常代码出生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出,
一场后面的代码,就不会被执行

try-catch-finally:真正的将异常处理掉了, throws 的方式只是将异常抛给了方法的调用者,并没有真正将异常处理掉

throw


注意:

可以抛出的异常必须是 Throwable 或其子类的实例。
 Throwable 或 Exception 类,建议用 Exception 类。
用户定义的异常同样要用 try–catch 捕获,但必须由用户自己抛出 throw new MyException()。

以上是关于谈谈你对异常的理解(高频面试题)的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE相关面试题

JAVA面试题 请谈谈你对Sychronized关键字的理解?

面试题:谈谈你对hibernate的理解

Java面试经典题解析——谈谈你对Java平台的理解?

java面试题(杨晓峰)---谈谈你对java平台的理解

[金三银四面试季]Java面向对象高频面试题