A bit long, but this is the book I wish I had when I first learned programming.
Intersperses code with funky diagrams that highlight/narrate the code execution, has exercises, demonstrates everything with clean, correct code.
Even for an experienced programmer, there's something in here, for example the last few chapters on Concurrency contain good reference code for some concurrency issues in Java (such as concurrent reading of modified data structures, lost updates, etc).
I'd read the first edition years ago. I've moved a bit from Java development in my day to day but started working on something recently and realized I had some rust to shake off. Wanted to get up to speed on the latest in Java development and had just finished Head First Python so thought I'd check this out. So happy I did. Definitely helped bring me up to speed and filled in some gaps.