在其所在的块内(即{}之内,如方法body、if {...}等)(只是单纯的一对{}不能称为块),throw语句可以屏蔽其后的语句(即在块内,该throw语句后面不能再写其他语句),但在块之外,还是可以写其他的语句的。如:
public class ExceptionTest
{
private static void func() throws Exception
{
throw new Exception();
//System.out.println("Threw Exception"); //error
}
private static void func2() throws Exception
{
boolean tag = true;
if (tag)
{
throw new Exception();
//System.out.println("Threw Exception"); //error
}
System.out.println("No Exception"); //pass //Mark No.3
}
public static void main(String[] args)
{
try
{
func2(); //Mark No.1
throw new Exception(); //Mark No.2: direct throw in try
}
catch (Exception e)
{
System.out.println("Caught Exception");
}
System.out.println("Continue"); //Mark No.4
}
}
//output:
/*
Caught Exception
Continue
*/
如果不是直接在try中抛出异常(Mark No.2),而是调用会抛出异常的方法(Mark No.1),一旦throw语句执行,则包含该throw语句的函数(如本例的func2())直接退出,后续的语句都不执行(如Mark No.3处就没有运行)。而处理异常的函数(如本例的main())依旧是顺序运行,不会有什么影响,后续的语句继续运行(如Mark No.4处照常运行)。
2011-10-27 补充:多个throw的覆盖作用
如果你 throw 了一个 Exception,紧接着后面的 catch/finally 也 throw 了一个 Exception,那么,只有最后抛出的 Exception 才能被外围捕捉,前面 throw 的 Exception 就被覆盖掉了。
一个典型的可能的例子是:
try {
// 读文件
} finally {
if (io != null) {
io.close();
}
}
如果读文件时出了 FileNotFoundException,而不巧 io.close() 也出了 IOException,那么外围只能捕捉到 IOException,而真实的原因 FileNotFoundException 却捕捉不到。
《Practical Java》上说可以用一个Collection来保存Exception,最后 throw 出一个 AllException(Collection<Exception> c) 这样的异常出来。但是感觉太麻烦了,估计很少有人这么做。这里记录一下,也只能说是为调试提供一种可能的异常判断思路,真要遇上奇葩的情况,还是自求多福吧……
分享到:
相关推荐
throw异常:C#语言throw异常处理语句, throw语句用于发出在执行期间出现反常情况(异常)信号throw语句通常和try-catch或try-finally语句起使用可以使用throw语句显式引发异常(这里引发自定义异常)创建用户自定义异常...
Java的throw和return
Java中的throw与throws的关键字的使用
异常中throw与throws的使用区别
21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21.javathrow抛出异常对象.zip21....
java throw抛出异常实例二 java throw抛出异常实例二
throws与throw.txt区别区别区别区别
C++语言处理异常 try catch throw,带程序例子
一个非常简单的try-throw-catch源码
C++里面为什么有时候在函数声明的时候在后面加throw()关键字? 解释: C++函数后面加关键字throw(something)限制,是对这个函数的异常安全作出限制;这是一种异常规范,只会出现在声明函数时,表示这个函数可能抛出...
无论是.net还是java,在开发程序时都难免会用到throw关键字,对于初学者一般会认为它与try…catch捆绑在一起,这当然是错误的,事实上,throw的一个最重要的作用就是: 让程序告诉用户一些事情,这些事情一般是开发...
WEB开发 之 JavaScript 错误 - Throw、Try 和 Catch.docx
java throw抛出异常实例一 java throw抛出异常实例一
主要介绍了详解Java异常处理中throw与throws关键字的用法区别,这也是Java面试题目中的常客,需要的朋友可以参考下
throw new Error(10,"asdasdasd") } catch (e) { alert(e.message); alert(e.description) alert(e.number) alert(e.name) throw new Error(10,"asdasdasd") } [removed] 在...
ECMAScript throw表达式 该提议定义了新的语法以从表达式上下文中引发异常。 地位 阶段: 2 冠军:罗恩·巴克顿(@rbuckton) 有关更多信息,请参阅。 作者 罗恩·巴克顿(@rbuckton) 提议 throw表达式使您可以在...
try/catch/throw try/catch/throw的优点: 1.可以自定义抛出异常之后的操作 2.异常抛出后会一直返回调用函数(或者说上一层函数),直到被catch到,所以便可以统一将catch语句写在一起,使代码更加方便整洁。 1....
throw的详细用法.doc
Java异常处理--throw手动抛出异常对象