我想知道在分析构造函数的字节码时是否有一种明显而快速的方法来确定super()
代码的结束位置。
更具体地说,与 Java 形成鲜明对比的是,在构造函数中对任何super()
构造函数方法的调用都是可选的(或者更确切地说,当不存在时——隐式),在字节码世界中它总是需要的。
出于黑魔法的目的,我需要仅通过字节码分析和可用的最简单方法INVOKESPECIAL
来了解与 Java 世界调用相对应的调用是什么super()
。
我会给你一个困难的例子:
public static class A {
public A(Object o, Object b) {
}
}
public static class B extends A {
public B() {
//the below super is in bold just to signal that's the one
//I'm looking for
SUPER(new A(new Object(), new Integer(2)), new Integer(1));
System.out.println(new A(new Object(), new Integer(2)));
}
}
使用相应的字节码: