前言:
java 中的异常处理机制你真的理解了吗?掌握了吗?
catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.exit() 方法怎么处理?当 catch 和 finally 体里同时遇上 return 怎么办?
相信你在处理异常的时候不是每次都把它 throws 掉就完事了,很多时候异常是需要我们自己来 catch 并针对所抛出的 Exception 做一些后续的处理工作。
直接上代码,先贴下面测试需要调用的方法:
1
2 // catch 后续处理工作
3 public static boolean catchMethod() {
4 System.out.print("call catchMethod and return --->> ");
5 return false;
6 }
7 // finally后续处理工作
8 public static void finallyMethod() {
9 System.out.println();
10 System.out.print("call finallyMethod and do something --->> ");
11 }
12
1. 抛出 Exception,没有 finally,当 catch 遇上 return
1
2public static boolean catchTest() {
3 try {
4 int i = 10 / 0; // 抛出 Exception,后续处理被拒绝
5 System.out.println("i vaule is : " + i);
6 return true; // Exception 已经抛出,没有获得被执行的机会
7 } catch (Exception e) {
8 System.out.println(" -- Exception --");
9 return catchMethod(); // Exception 抛出,获得了调用方法并返回方法值的机会
10 }
11 }
12
后台输出结果:
1
2 -- Exception --
3call catchMethod and return --->> false
4
2. 抛出 Exception,当 catch 体里有 return,finally 体的代码块将在 catch 执行 return 之前被执行
1
2public static boolean catchFinallyTest1() {
3 try {
4 int i = 10 / 0; // 抛出 Exception,后续处理被拒绝
5 System.out.println("i vaule is : " + i);
6 return true; // Exception 已经抛出,没有获得被执行的机会
7 } catch (Exception e) {
8 System.out.println(" -- Exception --");
9 return catchMethod(); // Exception 抛出,获得了调用方法的机会,但方法值在 finally 执行完后才返回
10 }finally{
11 finallyMethod(); // Exception 抛出,finally 代码块将在 catch 执行 return 之前被执行
12 }
13 }
14
后台输出结果:
1
2 -- Exception --
3call catchMethod and return --->>
4call finallyMethod and do something --->> false
5
3. 不抛 Exception,当 finally 代码块里面遇上 return,finally 执行完后将结束整个方法
1
2public static boolean catchFinallyTest2() {
3 try {
4 int i = 10 / 2; // 不抛出 Exception
5 System.out.println("i vaule is : " + i);
6 return true; // 获得被执行的机会,但执行需要在 finally 执行完成之后才能被执行
7 } catch (Exception e) {
8 System.out.println(" -- Exception --");
9 return catchMethod();
10 }finally{
11 finallyMethod();
12 return false; // finally 中含有 return 语句,这个 return 将结束这个方法,不会在执行完之后再跳回 try 或 catch 继续执行,方法到此结束,返回 false
13 }
14 }
15
后台输出结果:
1
2i vaule is : 5
3
4call finallyMethod and do something --->> false
5
4. 不抛 Exception,当 finally 代码块里面遇上 System.exit() 方法 将结束和终止整个程序,而不只是方法
1
2public static boolean finallyExitTest() {
3 try {
4 int i = 10 / 2; // 不抛出 Exception
5 System.out.println("i vaule is : " + i);
6 return true; // 获得被执行的机会,但由于 finally 已经终止程序,返回值没有机会被返回
7 } catch (Exception e) {
8 System.out.println(" -- Exception --");
9 return true;
10 }finally {
11 finallyMethod();
12 System.exit(0);// finally 中含有 System.exit() 语句,System.exit() 将退出整个程序,程序将被终止
13 }
14 }
15
后台输出结果:
1
2i vaule is : 5
3
4call finallyMethod and do something --->>
5
5. 抛出 Exception,当 catch 和 finally 同时遇上 return,catch 的 return 返回值将不会被返回,finally 的 return 语句将结束整个方法并返回
1
2public static boolean finallyTest1() {
3 try {
4 int i = 10 / 0; // 抛出 Exception,后续处理被拒绝
5 System.out.println("i vaule is : " + i);
6 return true; // Exception 已经抛出,没有获得被执行的机会
7 } catch (Exception e) {
8 System.out.println(" -- Exception --");
9 return true; // Exception 已经抛出,获得被执行的机会,但返回操作将被 finally 截断
10 }finally {
11 finallyMethod();
12 return false; // return 将结束整个方法,返回 false
13 }
14 }
15
后台输出结果:
1
2 -- Exception --
3
4call finallyMethod and do something --->> false
5
6. 不抛出 Exception,当 finally 遇上 return,try 的 return 返回值将不会被返回,finally 的 return 语句将结束整个方法并返回
1
2public static boolean finallyTest2() {
3 try {
4 int i = 10 / 2; // 不抛出 Exception
5 System.out.println("i vaule is : " + i);
6 return true; // 获得被执行的机会,但返回将被 finally 截断
7 } catch (Exception e) {
8 System.out.println(" -- Exception --");
9 return true;
10 }finally {
11 finallyMethod();
12 return false; // return 将结束这个方法,不会在执行完之后再跳回 try 或 catch 继续执行,返回 false
13 }
14 }
15
后台输出结果:
1
2i vaule is : 5
3
4call finallyMethod and do something --->> false
5
结语:
(假设方法需要返回值)
java 的异常处理中,
在不抛出异常的情况下,程序执行完 try 里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有 finally 的代码块,
如果没有 finally 代码块,整个方法在执行完 try 代码块后返回相应的值来结束整个方法;
如果有 finally 代码块,此时程序执行到 try 代码块里的 return 语句之时并不会立即执行 return,而是先去执行 finally 代码块里的代码,
若 finally 代码块里没有 return 或没有能够终止程序的代码,程序将在执行完 finally 代码块代码之后再返回 try 代码块执行 return 语句来结束整个方法;
若 finally 代码块里有 return 或含有能够终止程序的代码,方法将在执行完 finally 之后被结束,不再跳回 try 代码块执行 return。
在抛出异常的情况下,原理也是和上面的一样的,你把上面说到的 try 换成 catch 去理解就 OK 了 *_*
分享到:
相关推荐
本实验的目的是让学生熟悉 Java 异常处理的概念,掌握异常捕获和处理的方法,并能自定义异常。 实验内容 ### 一、了解什么是异常,异常的概念,如何产生异常 在 Java 中,异常是指程序执行过程中出现的非正常情况...
本文档提供了 Java 异常处理的基本概念、关键字、异常类继承关系、异常处理的出口、多重 catch 块、异常抛出和捕捉等知识点,并提供了 best practice 和常见问题的解答,旨在帮助读者更好地理解和掌握 Java 异常处理...
try 语句块用于尝试执行可能产生异常的代码,catch 语句块用于捕捉和处理异常,finally 语句块用于释放资源。 在上面的习题中,我们使用 try-catch-finally 语句处理 EOFException、IOException、SQLException 等...
try-catch 语句可以捕捉和处理异常,而 throws 子句可以将异常抛出给上一级调用者。throw 语句可以抛出一个异常对象,从而中断程序的执行。 在 Java 中,异常类是通过继承 Exception 或 RuntimeException 类来实现...
03 掌握使用try-catch-finally语句块捕捉并处理异常。 05 掌握设计和使用用户自定义异常。 04 掌握使用throw语句抛出异常,以及使用throws语句声明方法异常。 《Java程序设计案例教程》教学课件07异常处理全文共31...
可以使用多个 catch 块来捕捉不同的异常类型,每个 catch 块都可以捕捉一个特定的异常类型。 2.3 finally 语句 finally 语句用于执行异常处理结束前的执行程序体,finally 语句在所有 catch 块执行完毕后执行,...
Java中的try-catch语句是一种异常处理机制,用于捕捉和处理异常。try-catch语句的作用是可以捕捉异常,避免程序崩溃,并提供异常处理机制。 3. 什么是Java中的finally语句?finally语句的作用是什么? Java中的...
try块中发生异常时,catch块将捕捉异常,finally块将始终执行。 Java程序设计 Java程序设计中,String对象是不可变对象,Char数组是可变对象。在Java中,方法参数传递是按值传递的,基本类型和对象引用的传递方式...
•如果程序需要捕捉Runtime异常,也可以使用try...catch块来捕捉Runtime异常。 使用throws声明抛出异常 •throws声明抛出异常的思路是:当前方法不知道应该如何这种类型的异常,该异常应该由上一级调 ...
Java语言中的异常处理语句有try、catch、finally和throws。try语句中包含可能发生异常的语句,catch语句用来捕获异常,finally语句用来执行异常处理结束前的执行语句。throws语句用来声明方法可能抛出的异常。 7. ...
* Catch:捕捉异常 * Finally block:finally块 八、多线程编程 * Thread:线程 * Process:进程 * Synchronization:同步 * Deadlock:死锁 * Starvation:饥饿 本文总结了Java常用英语单词,涵盖了Java基础概念...
* try-catch-finally 是捕捉异常的基本结构。 4.3 多线程 * 线程是程序执行的基本单位,可以实现高效的并发处理。 * 线程有五种基本状态:新建、运行、阻塞、等待、死亡。 4.4 文件与 I/O 流 * Java 中的 I/O 流...
try-catch 语句用于捕捉异常,throw 语句用于抛出异常,finally 语句用于执行清理工作。 IO 流 IO 流是 Java 中用于输入和输出数据的机制,包括文件流、网络流、字符流等。文件流用于读写文件,网络流用于读写网络...
try...catch语句可以用来捕捉和处理异常,finally语句可以用来释放资源。throw语句可以用来抛出异常,throws语句可以用来声明方法可能抛出的异常。 4. Java集合框架:包括ArrayList、LinkedList、Vector、HashSet、...
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...
* try-catch-finally语句是JAVA中的异常处理语句,try语句块中可能抛出异常,catch语句块中捕捉异常,finally语句块中执行清理工作。 四、流 * JAVA中的流可以分为输入流和输出流两种,输入流用于读取数据,输出流...
JAVA提供了try-catch-finally语句,用于捕捉和处理异常。 五、JAVA集合框架 JAVA集合框架是JAVA标准库的一部分,提供了一系列集合类,用于存储和管理大量数据。 5.1 集合框架概述 JAVA集合框架提供了一系列接口...
异常知识点汇总包括 try 语句、catch 语句、finally 语句、throw 语句等知识点。 1. try 语句 try 语句用于捕捉异常,避免程序的崩溃。 2. catch 语句 catch 语句用于捕捉异常,并执行相应的处理。 3. finally ...
throw和throws、try和catch;自定义异常类;使用finally;使用异常的技巧和原则; 7 IO输入输出流 获取文件的基本信息;列出指定目录下的文件,并可过滤文件;创建文件和目录;删除文件和目录;移动文件和目录; 复制...
3. 异常处理:Java语言提供了多种异常处理机制,例如使用try-catch语句捕捉异常,使用finally语句释放资源。 day26作业1涵盖了Java语言的基础知识、控制结构、函数、面向对象编程和异常处理等多个方面,旨在帮助...