I thought it was one of the pithier books & it gives both good advice and explanations of why it's good advice in each case.
There's some stuff that felt dated even for its time. For instance, GUI programming with AWT / Swing. It's super disappointing to spin up a GUI and have it look... well, like Java GUIs do. As a student, it can be a bit demoralizing to spend a bunch of time and effort only to end up with something that looks so stupid and unfinished.
On the whole, though. Great book.
'The Java Programming Language' - by James Gosling.
There is the old school - everything has an interface, with a concrete implementation and test implementation. OOM ORMs probably Hibernate. Lots of long winded naming.
Add some functional features in Java 8, streams, lambdas but still kind of a hybrid. Scala & Kotlin distracted much of the purely functional people but has influenced Java a lot to complicate what normal Java looks like.
Spring has a huge influence and probably is still the defacto framework to build in.
Sprinkle in some Clean code culture - (4 line functions) which got really popular but has died off.
Add reactive programming. You need async in single threaded languages like JS and Python, and you need async in high performance applications. Its toxic for most projects but has nonetheless been enthusiastically adopted and corrupted many a code base.
I like Vertx because its a complete break from Spring and much simpler with less magic, but it hasn't really gained enough popularity.
Java 17/21 added a bunch of new concepts like Records which some people have adopted Java into DDD style that is completely new.
So "Java" can mean so many different styles now its impossible to have one recommended textbook. Bloch you can't go wrong but is kinda basic construction rather than higher level guidance. I like "Vert.x in Action" but in general its not a good standard Java text. I'm kinda curious what others will suggest.