Java异常发生时程序的执行顺序

简介:
一些基础知识:
  1.try代码段包含可能产生例外的代码;
  2.try代码段后跟有一个或多个代码段;
  3.每个catch代码段声明其能处理的一种特定的异常并提供处理的方法;
  4.当异常发生时,程序会终止当前的流程,根据获取异常的类型去执行相应的catch代码段,有多个符合条件的catch时,只执行第一个;
  5.finally段的代码无论是否发生异常都会执行。
  6.在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。
  看一个例子:
/**
* @author Lansine
*
*/
public class T1 {
/**
* @param args
*/
public static void main(String[] args) {
String s = "1";
try {
s = "2";
System.out.println(s);
if (s == "2")
throw new Exception("h");
} catch (Exception e) {
s = "3";
System.out.println(s);
} finally {
s = "4";
System.out.println(s);
}
s = "5";
System.out.println(s);
}
}
  输出的结果是2,3,4,5    (这里的逗号只用于显示)。上述语句非常清楚,但是在上述结构中加上return,就变得有些复杂了,如
/**
* @author Lansine
*
*/
public class T2 {
/**
* @param args
*/
public static void main(String[] args) {
String s = "1";
try {
s = "2";
System.out.println(s);
return;
} catch (Exception e) {
s = "3";
System.out.println(s);
} finally {
s = "4";
System.out.println(s);
}
s = "5";
System.out.println(s);
}
}
输出的结果是2,4也就是说在try结构中,虽然使用了return语句强制函数返回,不再往下执行,但实现上finally中的还是执行了。但除了finally外的其它语句不再被执行。
  一个更流行的例子是:
import java.io.*;
/**
* @author Lansine
*
*/
public class Mine {
public static void main(String argv[]){
Mine m = new Mine();
try {
System.out.println(m.amethod());
} catch (Exception e) {
// TODO 自动生成 catch 块
//e.printStackTrace();
System.out.println("我知道了");
}
System.out.println("finished");
}
public int amethod()throws Exception {
try {
FileInputStream dis = new FileInputStream("Hello.txt"); // 1,抛出异常
System.out.println("异常发生之后");
} catch (Exception ex) {
System.out.println("No such file found"); // 2.catch捕捉异常,并执行
//throw new Exception("上面处理");
return -1; // 4,return 返回
} finally {
System.out.println("Doing finally"); // 3.finally一定会执行,在return之前。
}
System.out.println("在代码后面");
return 0;
}
}
  结果是:
  No such file found
  Doing finally
  -1
  finished
  如果在catch块中抛出异常,则结果为:
  No such file found
  Doing finally
  我知道了
  finished
  注意:如果异常往上抛直到main函数还没有被catch处理的话,程序将被异常终止。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
1天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
|
1天前
|
Java 关系型数据库 MySQL
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
|
2天前
|
Java 索引
【JAVA基础篇教学】第七篇:Java异常类型说明
【JAVA基础篇教学】第七篇:Java异常类型说明
|
3天前
|
Java Linux C语言
一步带你了解java程序逻辑控制
一步带你了解java程序逻辑控制
11 2
|
3天前
|
Java 数据安全/隐私保护
java中程序控制的典例
java中程序控制的典例
9 1
|
3天前
|
存储 Java 数据库连接
使用Java开发桌面应用程序
使用Java开发桌面应用程序
14 0
|
4天前
|
关系型数据库 MySQL Java
通过使用阿里云服务器,搭建Java程序的运行环境
通过使用阿里云服务器,搭建Java程序的运行环境
|
4天前
|
存储 Java 开发者
探索Java开发中触发空指针异常的场景
作为一名后端开发者在Java编程的世界中,想必大家对空指针并不陌生,空指针异常是一种常见而又令人头疼的问题,它可能会在我们最不经意的时候突然出现,给我们的代码带来困扰,甚至导致系统的不稳定性,而且最可怕的是有时候不能及时定位到它的具体位置。针对这个问题,我们需要深入了解触发空指针异常的代码场景,并寻找有效的方法来识别和处理这些异常情况,而且我觉得空指针异常是每个Java开发者都可能面临的挑战,但只要我们深入了解它的触发场景,并采取适当的预防和处理措施,我们就能够更好地应对这个问题。那么本文就来分享一下实际开发中一些常见的触发空指针异常的代码场景,并分享如何有效地识别和处理这些异常情况。
19 1
探索Java开发中触发空指针异常的场景
|
6天前
|
SQL 网络协议 Java
Java异常详解
Java异常详解
8 1