java 是否继续_Java异常被抛出或被捕获之后,代码是否继续执行的问题

在写程序的时候,我们经常被教导,要对异常的信息进行处理,哪里该抛出异常。但是,更多的时候,我们只是模仿异常的抛出,却不知道为什么要这样抛异常(被catch了?被向上抛了?后面的代码是否执行了?)。

接下来,我就简单的说一下异常抛出后的代码执行问题。此处不讨论自定义异常,因为自定义异常有自己的处理方式。

一、结论:

凡是有异常的地方,需要有处理异常的地方。(示例:Demo1, Demo2)

只要异常被处理,异常处理之后的代码都可以正常执行。(示例:Demo1, Demo2)

异常被往上抛出,则抛出异常之后的代码将不被执行。(示例:Demo2, Demo3)

二、示例代码

接下来用两段代码来说明异常抛出后代码执行的顺序

**示例1. **

Demo1.java

/*** 抛出异常的代码是放在 try 中*/

public classDemo1 {public static voidmain(String[] args) {try{

print();

Thread.sleep(200);

}catch(Exception e) {

e.printStackTrace();

System.out.println("打印抛出异常");

}

System.out.println("程序结束");

}private static voidprint() {int index = 0;while (index < 15) {try{

Thread.sleep(200);++index;if (index == 5 || index == 10) {throw newException();

}

}catch(Exception e) {

e.printStackTrace();

System.out.println("循环抛出异常");

}

System.out.println("index = " +index);

}

System.out.println("循环结束");

}

}

运行结果:

index = 1index= 2index= 3index= 4java.lang.Exception

循环抛出异常

index= 5at com.example.demo.Demo1.print(Demo1.java:22)

at com.example.demo.Demo1.main(Demo1.java:6)

index= 6index= 7index= 8index= 9java.lang.Exception

at com.example.demo.Demo1.print(Demo1.java:22)

at com.example.demo.Demo1.main(Demo1.java:6)

循环抛出异常

index= 10index= 11index= 12index= 13index= 14index= 15循环结束

程序结束

**示例2. **

Demo2.java

/*** 抛出异常的代码是放在 try 外*/

public classDemo2 {public static voidmain(String[] args) {try{

print();

Thread.sleep(200);

}catch(Exception e) {

e.printStackTrace();

System.out.println("打印抛出异常");

}

System.out.println("程序结束");

}private static void print() throwsException{int index = 0;while (index < 15){if (index == 5 || index == 10){throw newException();

}try{

Thread.sleep(200);++index;

}catch(Exception e) {

e.printStackTrace();

System.out.println("循环抛出异常");

}

System.out.println("index = "+index);

}

System.out.println("循环结束");

}

}

运行结果:

index = 1index= 2index= 3index= 4index= 5java.lang.Exception

at com.example.demo.Demo2.print(Demo2.java:19)

at com.example.demo.Demo2.main(Demo2.java:6)

打印抛出异常

程序结束

**示例3. **

Demo3.java

/*** 不对异常进行捕获,只是往上抛*/

public classDemo3 {public static void main(String[] args) throwsException {

print();

System.out.println("程序结束");

}private static void print() throwsException {int index = 0;while (index < 15){++index;if (index == 5 || index == 10){throw newException();

}

System.out.println("index = "+index);

}

System.out.println("循环结束");

}

}

运行结果

index = 1index= 2index= 3index= 4Exception in thread"main"java.lang.Exception

at com.example.demo.Demo3.print(Demo3.java:15)

at com.example.demo.Demo3.main(Demo3.java:5)

三、分析

Demo1 与 Demo2 的区别在于抛出异常的代码是放在 try 中,还是放在 try 外。

//抛出异常的代码

if (index == 5 || index == 10){throw newException();

}

分析:Demo1

print 方法没有往 main 方法抛出异常,而是在循环中直接 catch 异常。

异常被 catch 之后,循环继续执行。

在 print 方法执行结束之后,因为 main 方法没有出现任何异常,print 方法之后的代码都能正常执行。

分析:Demo2

print 方法往 main 方法抛出异常。

循环在异常出现的时候,循环将不再执行,异常被抛出到 main 方法中。

main 方法 catch 异常,异常在 catch 被处理之后,catch 之后的代码都能正常执行。

分析:Demo3

print 方法往 main 方法抛出异常。循环在异常出现的时候,循环将不再执行,异常被抛出到 main 方法中。

main 方法往上继续抛出异常。在 print 出现异常的时候,print 之后的代码将不再执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值