我有以下代码,我喜欢使用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.
}