Java's great virtue is stability: code written a decade ago still runs, and the ecosystem rewards deep knowledge. That same longevity means there is a lot to learn, and reading order determines whether you build a coherent picture or a pile of disconnected facts.
The sequence that works moves from language fundamentals, through the collections and generics you will use daily, into the effective-practice and concurrency knowledge that marks a serious Java developer, and finally into the design principles that keep large Java systems from collapsing under their own weight.
Learn the language
Start with Head first Java, whose visual, puzzle-driven style makes objects, inheritance, and the JVM approachable for newcomers. Reinforce it with Introduction to Java Programming and Data Structures, Comprehensive Version, which pairs the language with core computer-science concepts. When you want the professional reference, Core Java Volume I--Fundamentals (9th Edition) (Core Series) is the thorough, no-nonsense treatment working developers keep on the shelf.
Deepen your craft
Once you can write Java, learn to write it well. Java Generics and Collections explains the type system and data structures you will lean on constantly, and Effective Java is the single most recommended book in the ecosystem — a collection of best practices that quietly upgrades everything you write. Go further with Core Java, Volume II--Advanced Features for the advanced APIs, and Java Concurrency in Practice, the definitive guide to writing correct multithreaded code on the JVM. When performance matters, Java Performance teaches you how the JVM actually behaves under load.
Design for the long run
Java is where large systems live, so the path ends with design. Design Patterns. Elements of Reusable Object-oriented Software is the classic catalog of reusable solutions, and Clean Code and Clean Architecture teach the habits and structural principles that keep big codebases maintainable over years.
Work through this order and Java stops being verbose boilerplate and becomes a language you can build serious, lasting systems in. Follow the full path from your first public static void main to production-grade design.