从catch块调用方法

时间:2013-01-28 06:51:04

标签: java exception try-catch

我只是想知道当我从catch块调用一个方法时会发生什么 ,负责抛出异常(抛出异常)。 我很努力地搜索它,但没有找到任何令人满意的答案......

例如。

public void A()
{
 try{
     //code which may throw exception
    }
 catch(Exception e)
  {
   A();
  }
}

8 个答案:

答案 0 :(得分:3)

你尝试过吗?调用方法就像在任何地方调用它一样。如果它返回一个值,抛出一个异常,停止JVM,或者其他什么,它就像在任何地方一样工作。你正在做的是某种形式的recursion,其中一个方法调用自己。当你这样做时,你必须有某种terminating condition,否则它会继续永远调用它,或者因为你是Java,直到你的堆栈空间不足,当你得到一个StackOverflowError

答案 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'