throw后面的代码还会执行吗

如图代码所示,当这里throws 抛出的时候,后面的代码是否还会执行?

还有就是为何这里后面就不用catch捕获了,而下面还用catch捕获并再次throw了

请教各位了~

clipboard.png

问题解决了,谢谢各位的回答~

阅读 17.3k
5 个回答

不会运行。

1:运行时异常是RuntimeException类及其子类的异常,是非受检异常,如NullPointerException、IndexOutOfBoundsException等。由于这类异常要么是系统异常,无法处理,如网络问题;
要么是程序逻辑错误,如空指针异常;JVM必须停止运行以改正这种错误,所以运行时异常可以不进行处理(捕获或向上抛出,当然也可以处理),而由JVM自行处理。Java Runtime会自动catch到程序throw的RuntimeException,然后停止线程,打印异常。
2:非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类,是受检异常。非运行时异常必须进行处理(捕获或向上抛出),如果不处理,程序将出现编译错误。一般情况下,API中写了throws的Exception都不是RuntimeException。

  1. 第一个地方抛出异常后,下面的代码不会继续执行
  2. 至于为什么下面用try catch而下面不用,是因为下面的代码块可能出现多种异常
  1. 异常抛出后后面的代码不会在执行了, 除非是try...catch...finally里面的finally块。。
  2. Java的Exception分两大类一类是Checked这种抛出必须用try...catch捕获处理,RuntimeException不强制用try...catch捕获.

如果 你截图的地方 SeckillException 没有被上层补捕获,下面的不会执行。
但是看IDE的截图的话,下面代码不能执行的话是会有黄色警告的。

所以,麻烦贴出整个方法的代码

你框起来的代码如果执行了,抛出了异常,会被下面的catch掉,而if之后的代码不会执行;如果没有抛出异常,则后面的会继续执行,直到遇到新的异常或方法执行完毕跳出

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏