Java基础知识(六) 异常处理
2021/8/3 22:05:59
本文主要是介绍Java基础知识(六) 异常处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java基础知识
- 异常处理
- 1. finally块中的代码什么时候被执行
- 2. 异常处理的原理是什么
- 3. 运行时异常和普通异常有什么区别
上一篇:Java基础知识(五) 字符串与数组
异常处理
1. finally块中的代码什么时候被执行
在Java语言的异常处理中,finally块的作用就是为了保证无论出现什么情况,finally块里的代码一定会被执行。由于程序执行return就意味着结束对当前函数的调用并跳出这个函数体,因此任何语句要执行都只能在return前执行(除非碰到exit函数),因此finally块里的代码也是在return前执行的。
示例代码:
/** * 创建时间 2021/8/3 9:55 * finally代码块什么时候执行 * @author Ye * @version 1.0 */ public class Test13 { public static void main(String[] args) { System.out.println(test()); } public static String test(){ try{ Object o = null; o.equals(" "); return "我在try里面返回的"; }catch (Exception e){ e.printStackTrace(); }finally { System.out.println("执行了finally"); return "我在finally里面返回的"; } } }
运行截图:
说明,finally里面的return先执行,然后直接就返回了;发生了空指针异常,但是finally还是执行了。
但是finally里面的代码在一些情况也不会被执行
- 当程序在进入try语句块之前就出现异常时,会直接结束,不会执行finally块中的代码
- 当程序在try块中强制退出(System.exit(0))是也不会去执行finally块中的代码块
2. 异常处理的原理是什么
异常是指程序运行时(非编译时)所发生的非正常情况或错误,当程序违反了语义规则时,JVM 就会将出现的错误表示为一个异常并抛出。这个异常可以在 catch 程序块中进行捕获,然后进行处理。而异常处理的目的则是为了提高程序的安全性与鲁棒性。
Java 语言把异常当作对象来处理,并定义了一个基类(java.lang.Throwable)作为所有异常的父类。在 Java API 中,已经定义了许多异常类,这些异常类分为 Error(错误)和 Exception(异常)两大类。
违反语义规则包括两种情况:一种是 Java 类库内置的语义检查,例如当数组下标越界时,会引发 IndexOutOfBoundsException,当访问 null 的对象时,会引发 NullPointerException;另一种情况是 Java 允许开发人员扩展这种语义检查,开发人员可以创建自己的异常类(所有异常都是 Java. lang.Thowable 的子类),并自由选择在何时用 throw 关键字抛出异常。
3. 运行时异常和普通异常有什么区别
Java 提供了两种错误的异常类,分别为 Error 和 Exception,且它们拥有共同的父类——Throwable。
Error 表示程序在运行期间出现了非常严重的错误,并且该错误是不可恢复的,由于这属于JVM 层次的严重错误,因此这种错误是会导致程序终止执行的。此外,编译器不会检查 Error是否被处理,因此在程序中不推荐去捕获 Error类型的异常,主要原因是运行时异常多是由于逻辑错误导致的,属于应该解决的错误,也就是说,一个正确的程序中是不应该存在 Error的。OutOfMemoryError、ThreadDeath 等都属于错误。当这些异常发生时,JVM 一般会选择将线程终止。
Exception 表示可恢复的异常,是编译器可以捕捉到的。它包含两种类型:检查异常(checked exception)和运行时异常(runtime exception)。
参考:《Java程序员面试笔试宝典》 何昊、薛鹏、叶向阳 编著
这篇关于Java基础知识(六) 异常处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)