类似的问题已经被问到here。但这并没有提供答案。
try {
object = (Dev)Class.forName("Dev").newInstance();
} catch (Exception e)
{
throw new RuntimeException("Devis not available");
}
finally
{
return object;
}
但是终于阻止了警告:
finally块无法正常完成
但是根据我的不足,终于块总是被执行并返回对象。为什么警告说它不会正常完成?
答案 0 :(得分:4)
问题是finally块会删除任何抛出的异常,因为它会发出" normal"返回。
来自JLS spec:
finally子句的突然完成可能会破坏由return语句启动的控制权转移。
和(在您的案例中更相关):
请注意,finally子句的突然完成可能会破坏throw语句启动的控制转移。
答案 1 :(得分:3)
在try-catch-finally语句中有关于finally块的解释有很多。去搜索它。
无论如何快速解释:始终运行finally块,无论是否抛出(并且可能被捕获)异常。如果finally块以 unnormal 方式终止(例如自己抛出一个excpetion或返回一个值),那么这将总是覆盖try块或catch块中的内容。这也意味着它们会丢失。
结论:永远不会抛出异常从finally块返回一个值。仅用于清理过程。
答案 2 :(得分:0)
试试这个。如果你抛出异常而不是对象有问题。只是在捕获之前返回它。
try {
object = (Dev)Class.forName("Dev").newInstance();
return object;
} catch (Exception e)
{
throw new RuntimeException("Devis not available");
}
答案 3 :(得分:0)
从最后回来是java中的一个不好的做法。 它可能会导致许多意外的输出。请查看以下链接,了解一些此类示例: http://www.cs.arizona.edu/projects/sumatra/hallofshame/
无论如何发现与此最终阻止相关的链接很少,请按照以下链接获取与此相关的答案。 Does finally always execute in Java? Returning from a finally block in Java