在写程序的时候,我们经常被教导,要对异常的信息进行处理,哪里该抛出异常。但是,更多的时候,我们只是模仿异常的抛出,却不知道为什么要这样抛异常(被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 之后的代码将不再执行。

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

  1. java 在方法中抛出异常_Java异常的抛出

    在Java中,当定义的方法可能产生异常时,程序员必须抛出可能的异常. 抛出异常的两种方式,一是在方法内部用throw语句,二是在方法定义时用throws关键字 1.throw语句 在Java中,thr ...

  2. 将不确定变为确定~异常被抛出的顺序

    回到目录 在程序中,为了保正代码的严禁性我们会在需要的地方加个try...cache块,作用是对一个已知或者未知的异常进行捕获,这是正常的,任何一种面向对象的语言都提供了这个基础的功能,C#也不例外, ...

  3. java自定义异常及异常的抛出

    java自定义异常及异常的抛出 参考文章: (1)java自定义异常及异常的抛出 (2)https://www.cnblogs.com/gemiaomiao/p/11900564.html 备忘一下.

  4. SpringMvc的 @Valid 拦截到的异常如何抛出

    SpringMvc的 @Valid 拦截到的异常如何抛出 参考文章: (1)SpringMvc的 @Valid 拦截到的异常如何抛出 (2)https://www.cnblogs.com/acm-bi ...

  5. java 向上抛异常_java throws 向上抛出的概念问题

    展开全部 ------------------附注------------------------ 向上抛出的意思 针对  子类 父类, 这里面涉及到几个方面,最重323131333532363134 ...

  6. java 最后的异常_java – 最后不要抛出堆栈溢出异常

    Error不是例外.所以捕捉任何异常都不会捕获StackOverflowError. 所以让我们先来看一下"明显的错误" – (这段代码不太适合这个答案后面的说明): catch( ...

  7. java 非法参数异常_Java的比较抛出非法参数异常

    我得到这个错误:当我试图在Java中运行这个比较对我的实体系统Java的比较抛出非法参数异常 Exception in thread "Thread-3" java.lang.Il ...

  8. Java throw:异常的抛出

    到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下: throw ThrowableInstance; 这里,Throw ...

  9. java声明异常必须抛出吗_简述java中抛出异常的两种方式

    java编程中经常遇到异常,这时就需要利用java中的异常抛出机制,在java中提供了两种抛出异常的方法:try{}  catch() {}和throw. 一.抛出异常的两种方式 (1) 首先我们来看 ...

最新文章

  1. 批量导出表数据到CSV文件
  2. JavaScript 中 window.setTimeout() 的详细用法
  3. Pubwin EP 正式版完整安装全程-完整安装配置
  4. Java 使用枚举类的实例
  5. ABAP Text表的实现原理
  6. 中兴面试一个星期没有回音_如何在没有回声的情况下从亚马逊获取即时时尚建议...
  7. winforms中限定上传文件类型
  8. mysql客户端保存数据乱码_mysql客户端数据乱码问题
  9. 侧边菜单栏 android-menudrawer
  10. caffe与tensorflow框架下卷积的维度计算与一致性证明
  11. django 1.8 官方文档翻译: 1-2-2 编写你的第一个Django应用,第2部分
  12. 数据建模的的参考工具EZDML
  13. 2B or 2c : 做2019的幸存者
  14. UCI数据集+机器学习+十折交叉验证
  15. 盗窟手机小我私人撤军华强北:市场一年不如一年
  16. Amaze UI后台管理模板 v2.7.2
  17. Python3实现基于百度AI开放平台和图灵机器人API聊天机器人
  18. css改变透明背景png图片的图标颜色
  19. Python爬虫之scrapy_redis原理分析并实现断点续爬以及分布式爬虫
  20. Python 绘制惊艳的瀑布图

热门文章

  1. html5移动端开发(rem和媒体查询@media)
  2. RecycleVier的简单实现
  3. thymeleaf 使用页面报错_SpringBoot 使用thymeleaf 跳转页面时,总是提示404找不到页面...
  4. csredis封装_在.NET Core中使用CSRedis
  5. 菜鸟python 正则表达式_python基础知识(进阶篇--正则表达式)
  6. 计算机与打印机整体方案,打印机的一些使用方案
  7. html快照抓取,请教前端实现获取dom元素快照的方法
  8. 【Playable API】不用Animator如何播放动画?
  9. 千月影视双端源码开源版_最新支持双端神器更新,属实有点牛逼!
  10. OpenShift 4 - Fedora CoreOS (4) - 用 Ignition 定制 CoreOS 的网络/存储等配置