Java 有没有一种方法可以覆盖try-catch和finally的行为?

Java 有没有一种方法可以覆盖try-catch和finally的行为?,java,android,try-catch,try-catch-finally,finally,Java,Android,Try Catch,Try Catch Finally,Finally,到目前为止,我已经使用try-catch-finally作为异常处理机制,但我想创建一个通用的finally块,让它执行一些必要的操作 在我的场景中,我必须在捕获任何A、B、C类异常后执行相同的操作 问题是,我不想在每个try-catch块之后声明finally块。 这对我来说是非常乏味的过程,因为我有将近50 60个类,其中许多都使用频繁的try-catch块 所以我要求用一种更简单的方法来做同样的事情 有人找到捷径了吗? 我提前向您表示衷心的感谢。您可以在应用程序启动时,在类装入器装入类之前

到目前为止,我已经使用try-catch-finally作为异常处理机制,但我想创建一个通用的finally块,让它执行一些必要的操作

在我的场景中,我必须在捕获任何A、B、C类异常后执行相同的操作

问题是,我不想在每个try-catch块之后声明finally块。 这对我来说是非常乏味的过程,因为我有将近50 60个类,其中许多都使用频繁的try-catch块

所以我要求用一种更简单的方法来做同样的事情

有人找到捷径了吗?
我提前向您表示衷心的感谢。

您可以在应用程序启动时,在类装入器装入类之前,尝试在类中插入指令

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;

public class Main {

  private int run() {
    return new Test().myMethod();
  }

  public static void main( String[] args ) throws Exception {
    ClassPool pool = ClassPool.getDefault();
    CtClass cc = pool.get( "Test" );
    CtMethod cm = cc.getDeclaredMethod( "myMethod" );
    // insertAfter(..., true) means this block will be executed as finally
    cm.insertAfter( "{ System.out.println(\"my generic finally clause\"); }", true );    
    // here we override Test class in current class loader
    cc.toClass();
    System.out.println( new Main().run() );
  }
} 


// another file (Test.java)
public class Test {
  int myMethod() {
    throw new RuntimeException();
  }
}   

没有捷径-如果您没有在50-60个类中正确编写代码-您将不得不返回并修复它!对不起,兄弟。你可以做的一件事是在某种实用程序类中创建一个静态方法,将finally块的公共代码放在那里,然后在所有finally块中调用它。但是没有办法覆盖finally块,比如@alfasin说你必须返回并添加它。哦,天哪,这是一个可怕的消息,我希望是这样。当你在编写某人的代码时,这尤其困难。我不确定andriod,但是,您可以尝试使用aspectj之类的工具,在方法末尾嵌入一些运行时功能。但这不是一个初学者的话题。