我只是想知道当我从catch块调用一个方法时会发生什么 ,负责抛出异常(抛出异常)。 我很努力地搜索它,但没有找到任何令人满意的答案......
例如。
public void A()
{
try{
//code which may throw exception
}
catch(Exception e)
{
A();
}
}
答案 0 :(得分:3)
答案 1 :(得分:1)
为什么要在抛出异常的catch块中调用相同的方法?
它继续抛出异常,然后它可能导致无限循环,导致java堆空间错误。
您应该调用一个处理该异常的方法,或者采取一些适当的异常步骤。
现在针对您的问题,您可以调用catch块中方法A()
内可访问的任何方法。
public void myMethod(){
}
public void A()
{
try{
//code which may throw exception
}
catch(Exception e)
{
myMethod();
}
}
答案 2 :(得分:1)
是的,代码将陷入无限循环中。它会一次又一次地抛出异常。
答案 3 :(得分:1)
//Just add like while condition in your method
int count = 0;
int max-attempt = 5;
while(true) {
try {
// Some Code
// break out of loop, or return, on success
} catch (Exception e) {
// handle exception
if (++count >= max-attempt) throw e;
}
}
答案 4 :(得分:0)
这将导致无限循环。使用此代码:
package com.sandbox;
public class Sandbox {
public static void main(String[] args) {
new Sandbox().run();
}
private void run() {
try {
throw new RuntimeException("A");
} catch (Exception e) {
run();
}
}
}
这是抛出的异常:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.Exception.<init>(Exception.java:66)
at java.lang.RuntimeException.<init>(RuntimeException.java:62)
at com.sandbox.Sandbox.run(Sandbox.java:11)
at com.sandbox.Sandbox.run(Sandbox.java:13)
at com.sandbox.Sandbox.run(Sandbox.java:13)
at com.sandbox.Sandbox.run(Sandbox.java:13)
答案 5 :(得分:0)
它会重新尝试方法A()
然而,直到异常没有发生,这将继续重新尝试。
除非此方案中的Exception
是临时的,否则可能会导致无限循环。
可能最好的方法是在某些条件/超时时发出A()
调用。
答案 6 :(得分:0)
如果希望该方法在捕获/抛出异常时执行特定任务,则必须在catch块中调用方法。示例:您可能希望打印发生异常的原因;)
答案 7 :(得分:0)
我有类似的要求并尝试了这个
WHERE userid=1000101 and password='first'