Java : The Complete Java Reference
This book is called the Bible of Java programming and rightly so. Written by Herbert Schildt and released by Oracle Press, this book was first published way back in the 90s. This book is very comprehensive and covers just about anything that you want to learn about Java. Topics like data types, variables, arrays, control statements, method overloading and overriding, interface and packages, multithread programming are covered. In addition, it also contains components of the Java API library such as I/O, the Collections Framework, etc. The latest release i.e. the 10th edition is fully updated for Java 9 and covers Java 9 features like new module system, JShell, etc as well as Java 8 features like lamba expressions, the stream library and the default interface. What I really like about this book that is that it not only covers the syntax and semantics of the language but goes on to explain all the fundamentals programming principles of the language in great depth. Code samples are provided at every stage that makes it a lot easier to understand the topic being covered. All in all, a great reference book that must be part of every developer’s bookshelf.
Effective Java 2nd and 3rd Edition
Written by Joshua Bloch, the chief architect of the Java collection framework and Java concurrency package, this book is for an experienced Java developer looking to write code that not only works but is more reusable, cleaner and more robust. It is not a typical Java book and is structured slightly differently. It contains 78 best practices that should be followed while writing Java programs. The 78 best practices are divided into 11 different sections such as General programming, Classes and Interfaces, Annotations, Exceptions, Generics, Methods, Concurrency etc. This is not a beginner’s book and does not have “Hello World” type of examples, rather the best practices explained here will help experienced programmers to write better code. Another great aspect of this book is each topic covered in the book is accompanied with easy to understand code examples. Many people might argue that this book is outdated since its last edition was last published in 2008 and is written for Java 6. However, this book is very much relevant as most of its content covers core design principles and programming practices for better usage. Also the 3rd edition of this book covering features from Java 7,8 and 9 is scheduled to be released by December 2017.
Java Generics and Collections
As the name suggests, this book covers Java generics and collections in detail. Written by Maurice Naftalin and Philip Wadler, this comprehensive guide shows you how to master these very important features in Java. Generics and collections framework were introduced in Java 5 & 6 and are very powerful features of Java and something that every Java developer needs to know about. This book is divided into two parts. Part one consists of nine chapters and examines generics in extremely detail. It covers everything about generics right from very simple uses of generics to the strangest corner cases. Part two consists of eight chapters and teaches you everything you need to know about the collections libraries, so you’ll always know which is the most appropriate collection for any particular task and how that collection can be used for it. There is a separate dedicated chapter for each of Collection interface e.g. Set, List, Map, Queue and their implementations. The performance implications of the different collections are discussed in length and the book compares how well each collection performs in a different situation. Every concept is explained with the help of easy, clear to understand, meaningful examples. All in all, an essential read for any developer who wants to take their software development to the next level.
Core Java Volume 1 and Volume 2
Written by Cay Horstmann and Gary Cornell, this books series is a must read guide to Java for serious developers who want to use Java on real world projects. There are 2 volumes of this book. Volume 1 covers the fundamentals like getting started instructions for Java, data types, programming constructs, OOPs concepts, Generics, Collection framework, multithreading as well as Java swing and applets. Volume 2 covers advanced features like Streams and Files, JDBC, XML processing, Network Programming, Annotations, Security, JNI, Advanced Swing and AWT. Both volumes include thoroughly tested real-world examples. What really gets your attention is that the sample code has been carefully designed to be easy to understand as well as useful in practice and it is evident that a lot of thought process has gone into creating the sample code. The highlight of these books is that good practices like using proper naming convention, documentation and code commenting, naming classes correctly are followed throughout the book. The writing style is clear and easy to understand. The first edition of this book was released in 1996. The tenth edition of this book is the latest release and includes all the features of Java 8.
Java concurrency in practice
This book is another classic from Joshua Bloch, the architect of the Java collection framework and Java concurrency package, Doug Lea and team. As the name suggests, this book covers concurrency and multithreading in detail. The Java concurrency package which was added to Java in Java 5 & 6 provides a high level threading capability and was added as the existing concurrency primitives were found to be insufficient. The book starts off with basic thread concepts and then goes on to cover topics like task execution, thread pools, cancellation and shutdown, liveness hazards concepts, scalability, testing concurrent programs, locks, custom synchronizers, atomic variables and non-blocking synchronization. Instead of focusing on core Java classes this book focus on concurrency related issues like deadlock, starvation, thread-safety, race conditions and then present ways to solve them using Java concurrency classes. The examples in this book are clear, concise and intelligent. In short, one of the best book to learn concurrency and multi-threading in Java and a must-read book for experienced Java programmers.