0

我有以下代码,我喜欢使用 finally 来获取异常消息,因为使用 catch 我可以很容易地通过它的 arg 获取。但是我知道我无法使用 finally 获取异常消息。

try {
 MyClass obj=new MyClass();
 obj.strProName = jobj1.getString("productname");
 obj.strPrice = jobj1.getString("price");
 obj.strCurrency = jobj1.getString("currency");
 obj.strSalePrice = jobj1.getString("saleprice");
 obj.strStoreName = jobj1.getString("storename");

//arrayList.add(obj);
throw new Exception("Exception Reason!");

}
finally{
 //want to get that exception message here without using catch or can see how finally catching here the exception
}
4

5 回答 5

6

不同catch block的是,finally块不接收任何exception实例

所以,我的答案是否定的。

我的意思是打印消息,你需要Exception实例。

根据文档(jls-14.2

块是一系列语句、局部类声明和大括号内的局部变量声明语句。

因此,在 catch 块之外, catch(Exception e) {} 您无法访问它 ( e)。

于 2013-08-22T11:43:45.773 回答
3

但据我所知,我无法使用 finally 获取异常消息。

这是正确的,要抓住一个例外,你,嗯......必须使用一个catch子句。

但是,您可以将消息存储在变量中(在 catch 子句中)并稍后在 finally 子句中使用该变量。

于 2013-08-22T11:43:33.740 回答
2

finally没有捕捉到异常。您只能在catch块中捕获异常。块的目的finally是在两种情况下都执行,即无论是否发生异常,它都会执行。

于 2013-08-22T11:42:14.123 回答
1

finally 不会捕获异常,它只是您可以用来始终做某事的东西,即使没有错误并且永远不会调用 catch。

try {
 MyClass obj=new MyClass();
 obj.strProName = jobj1.getString("productname");
 obj.strPrice = jobj1.getString("price");
 obj.strCurrency = jobj1.getString("currency");
 obj.strSalePrice = jobj1.getString("saleprice");
 obj.strStoreName = jobj1.getString("storename");
}
//arrayList.add(obj); here you can Catch the exception, meaning it will only show if there is an exception!
catch(Exception e){
 System.out.print(e+"=Exception Reason!");
}
finally{
//Finally is used to do something no matter what. 
//It will do what ever you want it to do, 
//even if the catch is never used. 
//Use catch to show exception, 
//finally to close possible connections to db etc.
}
于 2013-08-22T11:48:19.447 回答
-1

尝试这个

try {
       .....
       throw new Exception("Exception Reason!");
    }
catch(Exception e){
     msg=e.getMessage();
finally{
//USE String msg here.
}
于 2013-08-22T11:48:05.183 回答