Something to add that would help on your examples, would be a non-static counter to the static inner class. I think that would really help convey when when multiple objects are created but the reference to the first class instance is kept. With the static count variable new object instantiation is tracked, but misses a detail on object references that is interesting.<p>Specifically for this example:<p><pre><code> System.out.println("\nVariable in method reference");
obj = new Counter(); // NPE if after method reference declaration!
final Runnable varRef = obj::show;
System.out.println("Running...");
varRef.run(); obj = new Counter(); varRef.run();
</code></pre>
obj::show was evaluated, so varRef should be pointing to the original instance method of show, even when called the second time. Which could potentially create a memory leak if someone is tracking the method references and recreating objects underneath unknowingly.<p>However if I am completely wrong about this please tell me! I have not gone through and run this code for confirmation, so I would be very happy to know if I'm mistaken. I'm going by memory without reference checking or testing. In either case if I am wrong or right - please put a note about this situation! It would help immensely and make your post even more interesting.<p>Thanks!<p>Leon