java—在try块中发生异常时从方法调用catch块

kdfy810k  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(311)

有没有可能在方法中写入catch块,并在try块中发生异常时从finally调用它
前任:

try
    {
        int a=0,b=0;
        a=b/0;      
    }
    finally
    {
        callExceptions();
    }
}
public static void callExceptions()
{
    catch(Exception e)
    {
        System.out.println(e);
    }
}
egdjgwm8

egdjgwm81#

使用try/catch/finally的方法
1.-当您想尝试使用某个方法时,如果一切顺利,将继续,否则将在catch块上引发一个异常。

try {
      // some method or logic that might throw some exception.
 } catch (ExceptionType name) {
     // catch the exception that was thrown.
 }

2.-与第一个相同,但添加finally块意味着如果发生意外异常,finally块将始终独立执行。

try {
      // some method or logic that might throw some exception.
 } catch (ExceptionType name) {
      // catch the exception that was thrown.
 } finally {
     // some logic after try or catch blocks.
 }

3.-try和finally块用于确保资源关闭,而不管try语句是正常完成还是突然完成。例如:

BufferedReader br = new BufferedReader(new FileReader(path));
try {
    return br.readLine();
} finally {
    if (br != null) br.close();
}

try/catch/finally块的java参考文档
关于你的案子:

public static myMethod() {    
    try {
        int a=0,b=0;
        a=b/0;      
    } catch (Exception e) {
        callException(e);
    }    
}

public static void callException(Exception e) {
    System.out.println(e);
}
8ulbf1ek

8ulbf1ek2#

catch 块必须跟在 try 阻止。它不能单独存在。以及 finally 块是在 catch .
你一个人写了一封信 catch 内部 finally . 那没道理。
最简单的解决方案是将异常作为参数传递给方法:

public static myMethod() {    
    try
    {
        int a=0,b=0;
        a=b/0;      
    }
    catch (Exception e)
    {
        callExceptions(e);
    }
    finally
    {
        // do what ever you want or remove this block
    }
}

public static void callExceptions(Exception e)
{
    System.out.println(e);
}
bttbmeg0

bttbmeg03#

这是太长的评论,所以很抱歉,这不是一个直接回答你的问题(如其他人所指出的,这是不可能的)。假设您要做的是定义一种在一个地方处理异常逻辑的通用方法, Callable 也许是个好办法。像下面这样的东西就足够了。。。虽然我不想评论这是否是个好主意。。。

static E callAndHandle(final Callable<E> callable) {
    try {
        return callable.call();
    } catch (final Exception ex) {
        System.out.println(ex);
        return null;
    }
}

static void tryIt() {
    final String result = callAndHandle(() -> {
        // Thing which might throw an Exception
        return "ok";
    });

    // result == null => there was an error here...
}

不幸的是 Runnable 没有申报任何 Exception 在签名上,所以如果你知道它总是需要 void 你不喜欢 return null; 或者类似的黑客,你必须定义你自己的接口来传递。

相关问题