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