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



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

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

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

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

根据文件(jls-14.2)

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

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

但据我所知,我无法使用最后

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

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

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

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

试试这个

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

相关内容

  • 没有找到相关文章

最新更新