
* Introduction to Java Programming and Data Structures
* Head First Java
* Think Java
* Clean Code
* Pragmatic Programmer
* Effective Java
* Refactoring
* Java Concurrency in Practice
* Test Driven
* Head First Design Patterns
* Release It!
* Kotlin in Action
* Spring in Action
* Spring Boot in Action
* Cloud Native Java
* Spring Microservices in Action
* Learning Spring Boot 2.0
Feel free to add more suggestions for the list. Also make sure to share your experience with the ones already on the list.2. Refactoring: Improving the Design of Existing Code
3. Patterns of Enterprise Application Architecture
Even so, Head First Java in particular is a good introduction to object-oriented programming for someone with no prior background in it. I feel like any beginner who can look past the silliness of the Head First style could learn efficiently from this series. I wouldn't use a Head First book now, but they are good for people without much background to build on who want an easy learning curve.
Head First Java by Kathy Sierra is also a decent introduction to the language, though much more limited and outdated.
Oracle also has on-line Java tutorial which I regularly visit during development. However the content is more scattered than in a book.