Thinking in Java learning notes