Effective Java
Item 1. Consider Static Factory Methods Instead of ConstructorsItem 2. Consider a Builder When Faced with Many Constructor ParametersItem 3. Ensure Singleton with Private Constructor or Enum TypeItem 4. Enforce Noninstantiability with a Private ConstructorItem 5. Prefer Dependency Injection to Hardwiring ResourcesItem 6. Avoid Creating Unnecessary ObjectsItem 7. Eliminate Obsolete Object ReferencesItem 8. Avoid Finalizers and CleanersItem 9.Prefer try-with-resources to try-finallyItem10. Adhering to General Rules When Overriding equalsItem11. Override hashCode When You Override equalsItem12. Always Override toStringItem13. Override Clone JudiciouslyItem14. Consider Implementing ComparableItem15. Minimize the Accessibility of Classes and MembersItem16. Accessor Methods Over Public FieldsItem17. Minimize MutabilityItem18. Composition over inherentanceItem19. Design and Document for Inheritance, or Else Prohibit ItItem20. Prefer Interfaces to Abstract ClassesItem21. Design Interfaces with Implementations in MindItem22. Use Interfaces Only to define TypesItem23. Prefer Class Hierarchies to Tagged ClassesItem24. Favor Static Member Classes Over Non-StaticItem28. Use Lists Instead of ArraysItem29. Prefer Generic TypesItem30. Favor Generic Methods