Java Software Solutions: Foundations of Program Design by John Lewis
Pitched at the beginner, this text teaches how to design and implement high-quality software programs using Java. The authors emphasize problem solving by understanding the requirements, exploring options, and designing conceptually clean solutions. They also seek to demonstrate the Java features in realistic ways.