thinking in java version 4 source code