使用java中的finally块捕获其消息的异常

时间:2013-08-22 11:40:35

标签: java exception-handling try-catch-finally

我有以下代码,我喜欢使用finally获取异常消息,因为使用catch我可以很容易地通过它的arg.but我知道我无法使用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
}

5 个答案:

答案 0 :(得分:6)

catch block不同,finally阻止不会收到任何exception个实例

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

我的意思是打印邮件,您需要Exception个实例。

根据文档(jls-14.2

  

块是大括号内的语句,本地类声明和局部变量声明语句的序列。

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

答案 1 :(得分:3)

  

但是我知道我无法使用获取异常消息   最后。

这是正确的,抓住一个激励你,好吧......必须使用 catch 子句。

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

最后不会捕获异常,它只是一个你可以用来总是做某事的东西,即使没有错误也永远不会要求捕获。

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.
}

答案 4 :(得分:0)

试试这个

try {
       .....
       throw new Exception("Exception Reason!");
    }
catch(Exception e){
     msg=e.getMessage();
finally{
//USE String msg here.
}