Effective Java is a book by Joshua Bloch that provides best practices for writing effective Java code. It covers topics like object creation, classes and interfaces, methods, and general programming. The book recommends favoring composition over inheritance and static factory methods over constructors. It also advises avoiding unnecessary objects and using defensive copying when accepting mutable parameters. Effective Java provides many code examples to illustrate good and bad programming techniques.