浅谈java中异常抛出后代码是否会继续执行
作者:Alent 发布时间:2023-01-23 18:37:45
问题
今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return
语句呢?
public void add(int index, E element){
if(size >= elements.length) {
throw new RuntimeException("顺序表已满,无法添加");
//return; //需要吗?
}
....
}
为了回答这个问题,我编写了几段代码测试了一下,结果如下:
//代码1
public static void test() throws Exception {
throw new Exception("参数越界");
System.out.println("异常后"); //编译错误,「无法访问的语句」
}
//代码2
try{
throw new Exception("参数越界");
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("异常后");//可以执行
//代码3
if(true) {
throw new Exception("参数越界");
}
System.out.println("异常后"); //抛出异常,不会执行
总结:
若一段代码前有异常抛出,并且这个异常没有被捕获,这段代码将产生编译时错误「无法访问的语句」。如代码1
若一段代码前有异常抛出,并且这个异常被try...catch
所捕获,若此时catch
语句中没有抛出新的异常,则这段代码能够被执行,否则,同第1条。如代码2
若在一个条件语句中抛出异常,则程序能被编译,但后面的语句不会被执行。如代码3
另外总结一下运行时异常与非运行时异常的区别:
运行时异常是RuntimeException
类及其子类的异常,是非受检异常,如NullPointerException
、IndexOutOfBoundsException
等。由于这类异常要么是系统异常,无法处理,如网络问题;
要么是程序逻辑错误,如空指针异常;JVM必须停止运行以改正这种错误,所以运行时异常可以不进行处理(捕获或向上抛出,当然也可以处理),而由JVM自行处理。Java Runtime
会自动catch
到程序throw
的RuntimeException
,然后停止线程,打印异常。
非运行时异常是RuntimeException
以外的异常,类型上都属于Exception
类及其子类,是受检异常。非运行时异常必须进行处理(捕获或向上抛出),如果不处理,程序将出现编译错误。一般情况下,API中写了throws
的Exception
都不是RuntimeException
。
常见运行时异常:
常见非运行时异常:
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


猜你喜欢
- 本文实例为大家分享了Android购物分类效果展示的具体代码,供大家参考,具体内容如下SecondActivity.javapublic c
- 一、将已经编译后的java中Class文件进行打包;打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理;使用的命令:jar
- PS:本文使用jdk1.7解析1.Object类 的equals 方法 /** &
- ScriptControl接口属性名称类型备注AllowUIBOOL检测是否允许运行用户的接口元素。如果为False,则诸如消息框之类的界面
- 如何查看 Java 的字节码文件?在 Java 中,字节码文件.class实际上是二进制文件,并不能直接查看。要想查看,我们只能通过反编译对
- C# 中有三种定时器,System.Windows.Forms 中的定时器和 System.Timers.Timer 的工作方式是完全一样的
- 本文实例讲述了Android获取SD卡路径及SDCard内存的方法。分享给大家供大家参考。具体分析如下:昨天在研究拍照后突破的存储路径的问题
- 1、通过WindowManager获取DisplayMetrics dm = new DisplayMetrics();getWindowM
- 本文实例为大家分享了C#使用Socket实现局域网聊天的具体代码,供大家参考,具体内容如下先运行一个java写的局域网聊天,效果图如下后使用
- 目录1、数组本质2、指针3、字符数组4、char * 与 char a[ ]5、char ** 和char *a[]6、C语言中char s
- 使用lamda表达式对list进行求和Lambda 表达式是 JDK8 的一个新特性,最近写项目中求和计算使用的较多,写篇文章记录下。1、实
- 汇总:1. 冒泡排序每轮循环确定最值;public void bubbleSort(int[] nums){ in
- 本文实例为大家分享了java五子棋游戏的具体代码,供大家参考,具体内容如下AI思路:通过判断棋盘上每个空位的分数,去分数最高的几个点,随机下
- Android Studio第一次启动的Fetching android sdk component information的问题1)进入刚
- 最近做项目中遇到ToolBar因为不同的界面toobar不同为了描述统一的风格。相信大家也非常清楚,大多数ToolBar包括以下几个方面左标
- 前言:OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件。它的出现就是为了替代已经进入停更维护状态的 Feig
- 一.小伙伴们在做钱包支付中,相信会有个绕不过去的输入支付密码页面。下面小编给个效果图:898342572738938468.png实现的原理
- SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):cache – 对给定命名空间的缓存配置。cache-ref – 对其他命
- 这篇文章从系统源代码分析,讲述如何将程序创建的多媒体文件加入系统的媒体库,如何从媒体库删除,以及大多数程序开发者经常遇到的无法添加到媒体库的
- instanceof关键字的使用1. 语法格式x instanceof A:检验x是否为类A的对象,返回值为boolean类型,如果是,返回