Java 从catch块调用方法
我只是想知道当我从catch块调用一个方法时会发生什么 ,它负责引发异常(引发异常)。 我努力寻找,但没有找到任何令人满意的答案 例如Java 从catch块调用方法,java,exception,try-catch,Java,Exception,Try Catch,我只是想知道当我从catch块调用一个方法时会发生什么 ,它负责引发异常(引发异常)。 我努力寻找,但没有找到任何令人满意的答案 例如 public void A() { try{ //code which may throw exception } catch(Exception e) { A(); } } 你试过了吗?在那里调用方法与在任何地方调用方法相同。如果它返回一个值,抛出一个异常,停止JVM,或者别的什么,它将在那里像在任何地方一样工作。您所做的
public void A()
{
try{
//code which may throw exception
}
catch(Exception e)
{
A();
}
}
你试过了吗?在那里调用方法与在任何地方调用方法相同。如果它返回一个值,抛出一个异常,停止JVM,或者别的什么,它将在那里像在任何地方一样工作。您所做的是某种形式的,其中一个方法调用自身。当你这样做的时候,你必须要有某种类型的,否则它会一直调用自己,或者,因为你在Java中,直到你的堆栈空间用完,当你得到一个?在那里调用方法与在任何地方调用方法相同。如果它返回一个值,抛出一个异常,停止JVM,或者别的什么,它将在那里像在任何地方一样工作。您所做的是某种形式的方法调用自己。当你这样做的时候,你必须有某种类型的,否则它会一直调用自己,或者,因为你在Java中,直到你的堆栈空间用完,当你得到一个。这将导致一个无限循环。使用此代码:
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)
线程“main”java.lang.StackOverflower中出现异常
位于java.lang.Exception。(Exception.java:66)
位于java.lang.RuntimeException。(RuntimeException.java:62)
运行(sandbox.java:11)
运行(sandbox.java:13)
运行(sandbox.java:13)
运行(sandbox.java:13)
这将导致无限循环。使用此代码:
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)
线程“main”java.lang.StackOverflower中出现异常
位于java.lang.Exception。(Exception.java:66)
位于java.lang.RuntimeException。(RuntimeException.java:62)
运行(sandbox.java:11)
运行(sandbox.java:13)
运行(sandbox.java:13)
运行(sandbox.java:13)
它将重新尝试方法
A()
但是,在未发生异常之前,将继续重新尝试
除非此场景中的异常是临时异常,否则这可能会导致无限循环
可能最好的方法是在某些条件/超时时发出a()
调用。它将重新尝试方法a()
但是,在未发生异常之前,将继续重新尝试
除非此场景中的异常是临时异常,否则这可能会导致无限循环
最好的方法可能是在某些条件/超时时发出a()
调用。为什么要在抛出异常的catch块中调用相同的方法
如果继续抛出异常,则可能导致无限循环,从而导致java堆空间错误
您应该调用一个处理该异常的方法,或者为该异常采取一些适当的步骤
现在,对于您的问题,您可以调用catch块中方法A()
中可访问的任何方法
public void myMethod(){
}
public void A()
{
try{
//code which may throw exception
}
catch(Exception e)
{
myMethod();
}
}
为什么要在抛出异常的catch块中调用相同的方法
如果继续抛出异常,则可能导致无限循环,从而导致java堆空间错误
您应该调用一个处理该异常的方法,或者为该异常采取一些适当的步骤
现在,对于您的问题,您可以调用catch块中方法A()
中可访问的任何方法
public void myMethod(){
}
public void A()
{
try{
//code which may throw exception
}
catch(Exception e)
{
myMethod();
}
}
当捕获/抛出异常时,如果希望该方法执行特定任务,则必须在catch块中调用该方法。示例:您可能希望打印发生异常的原因;) 当捕获/抛出异常时,如果希望该方法执行特定任务,则必须在catch块中调用该方法。示例:您可能希望打印发生异常的原因;) 是,代码将被困在无限循环中。它会一次又一次地抛出异常。是,代码将被困在无限循环中。它会一次又一次地抛出异常。我有一个类似的要求,并尝试了这个方法
public void A(Boolean callingFromCatch)
{
if(!callingFromCatch){
try{
//code which may throw exception
}
catch(Exception e)
{
A(true);
}
}else{
try{
reloadPage();
//try again
}
catch(Exception e){}
}
}
我有一个类似的要求,并尝试了这个
public void A(Boolean callingFromCatch)
{
if(!callingFromCatch){
try{
//code which may throw exception
}
catch(Exception e)
{
A(true);
}
}else{
try{
reloadPage();
//try again
}
catch(Exception e){}
}
}
真奇怪。。。在我提交答案的同时,我的答案似乎被否决了。这是怎么回事?欢迎来到StackOverflow:)真奇怪。。。在我提交答案的同时,我的答案似乎被否决了。这是怎么回事?欢迎使用StackOverflow:)如果它总是抛出异常,那么它将是一个无限循环;)。。您不想这样做您可以在引发异常之前调用方法,以便在引发异常之前执行您想执行的操作。没有什么特别的事情会发生。bos仅仅点125 ke de goldy…如果它总是抛出异常,那么它将是一个无限循环;)。。您不想这样做您可以在引发异常之前调用方法,以便在引发异常之前执行您想执行的操作。没有什么特别的事情会发生,只要125分就可以了。。。