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