Thinking In Java Bruce Eckel