The book covers most of Java SE8, taking the time to introduce the language itself to newcomers. Actually, a third of the book serves that purpose, which is a bit unbalanced for a reference. While this may be welcome to the reader who is still learning Java, it prevents the...See more
The book covers most of Java SE8, taking the time to introduce the language itself to newcomers. Actually, a third of the book serves that purpose, which is a bit unbalanced for a reference. While this may be welcome to the reader who is still learning Java, it prevents the coverage of advanced topics that would have been appreciated by many programmers expecting the book to be somewhat more faithful to its title. Complete it is certainly not, ClassLoader and SecurityManager are in the "Here be dragons" category, even though they would have come in handy for anyone wondering how to implement plug-ins, not an uncommon feature in today''s applications. Not even a mention of Nashorn, one of the key SE8 additions. Not much either on how to profile applications, unit-test and deploy them. And so on... not a huge disappointment, but still not up to standards set by books like "C# in a Nutshell" or "Python Essential Reference". What most readers will probably miss is an algorithmic complexity evaluation of the Java collections. Stating that the TreeSet class "access and retrieval time are quite fast" just won''t cut it. Is this O(1), O(n)? An educated guess would hopefully tell the reader O(log(n)) and help them deciding which class to choose... except the reader shouldn''t have to guess while holding a "Complete Reference", especially when it''s endorsed by Oracle (who should have some insight on the complexity of their libraries). 118 pages are devoted to the old Awt classes (plus some more on Applets), for anyone who still cares, 84 pages to the Swing evolution, and 92 to JavaFX but no mention of FXML unfortunately, so it''s still pretty much last-century-oriented. The author could conveniently dismiss the legacy classes in favour of a more modern approach of designing user interfaces. I also have the feeling that the evolution of this book is coming in layers that are not so keen to mix: while there are - fortunately! - adequate references to the latest improvements here and there in older chapters, the overall code style has not been revised with the evolution of the language. Lambdas and the related Stream API are contained in their respective sections (which are surprisingly far from each other), but not used anywhere else, for example. And while these features are not the most polished and suffer from regrettable shortcomings, they still deserve to be emphasized a little further to show developers how they could be relieved with a little extra semantic sugar. In that chapter, I was also a bit sad to see in the Stream API section how stream sources were painstakingly created with a series of "myList.Add(<value>)" followed by a conversion, instead of a more elegant and now more idiomatic "Stream.of()" or "Array.asList()". Most helpful though, are detailed coverage of the threads, concurrency utilities and I/O classes. But since those were already present in earlier revisions of the book, I''m not sure anyone who already owns them wouldn''t be better off with a more detailed "Java 8 Lambdas" or "Functional Programming in Java", and maybe another decent reference on JavaFX (that I yet have to find). In conclusion, this book isn''t a reference but an interesting and definitely worthy introduction to Java, provided the reader skips some older, less relevant sections, then complete their learning with other books with a more modern style approach on GUI and functional programming, and possibly on performance considerations, since those topics are not the strong point of this "Complete Reference".