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...