Example 1
The first example is a simple anonymous class instance passed into our waitFor method.
public class Example1 {
// anonymous class
void example() throws InterruptedException {
waitFor(new Condition() {
@Override
public Boolean isSatisfied() {
return true;
}
});
}
}If we look at the bytecode below, the thing to notice is that an instance of the anonymous class is newed up at line 6. The #2 refers to a lookup, the result of which is shown in the comment. So it uses the new opcode with whatever is at #2 in the constant pool, this happens to be the anonymous class Example$1.
void example() throws java.lang.InterruptedException;
descriptor: ()V
flags:
Code:
stack=3, locals=1, args_size=1
0: new #2 // class Example1$1
3: dup
4: aload_0
5: invokespecial #3 // Method Example1$1."":(LExample1;)V
8: invokestatic #4 // Method WaitFor.waitFor...