By Peter Sestoft - Java Precisely: 2nd (second) Edition