by an high-performance point of view, calling an outer class static method is slower than calling a static method in the same class?
2 Answers
It depends. Consider the following:
public class Outer {
/*private*/ static void outerMethod() {
// do stuff
}
static class Inner {
public void doStuff() {
outerMethod();
}
}
}
The doStuff() method's bytecode looks like this:
0: invokestatic #2 // Method Outer.outerMethod:()V
3: return
But if we make outerMethod() private, the code will look like this instead:
0: invokestatic #2 // Method Outer.access$000:()V
3: return
The problem is that the inner class can't directly call the outer class method, because it's private. The compiler works around this by creating a synthetic access$000() method, which does nothing but call outerMethod(). Calling through the accessor method is slower unless the AOT or JIT compiler recognizes the pattern and optimizes it out.
So, calling an outer-class static method could be slower if it's also declared private.