The definitive guide to Java programming language best practices from Josh Bloch Each chapter of Effective Java, Third Edition, consists of several items, each presented in the form of a short, stand-alone essay that provides specific advice, insight into Java platform subtleties, and code examples. The comprehensive descriptions and explanations for each item illuminate what to do, what not to do, and why. While coverage is through Java 9, this guidance covers core Java features every programmer works with, regardless of which version. Concurrency: write clear, correct, well-documented concurrent programs Objects: creating and destroying; common methods Classes and interfaces: guidelines for making them usable, robust, and flexible Generics: tell the compiler what types of objects are permitted in each collection for safer and clearer programs Enums and annotations: two special-purpose families of reference types Functions: break a big job into smaller pieces that might well be written by different people separated by both time and space. Lambdas and streams: create function objects with more ease Method designs: treat parameters and return values; design method signatures; document methods Exceptions: improve a program's readability, reliability, and maintainability Object serialization: the dangers of serialization and how to minimize them General programming: local variables control structures libraries data types reflection native methods optimization naming conventions Programmers still consider this the best book on Java programming today.