Effective Java: Programming Language Guide
Total Page:16
File Type:pdf, Size:1020Kb
Effective Java: Programming Language Guide Joshua Bloch Publisher: Addison Wesley First Edition June 01, 2001 ISBN: 0-201-31005-8, 272 pages Are you ready for a concise book packed with insight and wisdom not found elsewhere? Do you want to gain a deeper understanding of the Java programming language? Do you want to write code that is clear, correct, robust, and reusable? Look no further! This book will provide you with these and many other benefits you may not even know you were looking for. Featuring fifty-seven valuable rules of thumb, Effective Java Programming Language Guide contains working solutions to the programming challenges most developers encounter each day. Offering comprehensive descriptions of techniques used by the experts who developed the Java platform, this book reveals what to do - and what not to do - in order to produce clear, robust and efficient code. Table of Contents Foreword............................................................................................................................... 1 Preface................................................................................................................................... 3 Acknowledgments.................................................................................................................4 Chapter 1. Introduction....................................................................................................... 5 Chapter 2. Creating and Destroying Objects .................................................................... 8 Item 1: Consider providing static factory methods instead of constructors....................... 8 Item 2: Enforce the singleton property with a private constructor................................... 11 Item 3: Enforce noninstantiability with a private constructor.......................................... 13 Item 4: Avoid creating duplicate objects.......................................................................... 13 Item 5: Eliminate obsolete object references ................................................................... 16 Item 6: Avoid finalizers.................................................................................................... 19 Chapter 3. Methods Common to All Objects .................................................................. 23 Item 7: Obey the general contract when overriding equals............................................ 23 Item 8: Always override hashCode when you override equals...................................... 31 Item 9: Always override toString.................................................................................. 35 Item 10: Override clone judiciously ............................................................................... 37 Item 11: Consider implementing Comparable................................................................. 44 Chapter 4. Classes and Interfaces..................................................................................... 48 Item 12: Minimize the accessibility of classes and members .......................................... 48 Item 13: Favor immutability ............................................................................................ 50 Item 14: Favor composition over inheritance .................................................................. 57 Item 15: Design and document for inheritance or else prohibit it.................................... 61 Item 16: Prefer interfaces to abstract classes ................................................................... 65 Item 17: Use interfaces only to define types .................................................................... 69 Item 18: Favor static member classes over nonstatic....................................................... 71 Chapter 5. Substitutes for C Constructs .......................................................................... 75 Item 19: Replace structures with classes.......................................................................... 75 Item 20: Replace unions with class hierarchies ............................................................... 76 Item 21: Replace enum constructs with classes ................................................................ 80 Item 22: Replace function pointers with classes and interfaces....................................... 88 Chapter 6. Methods............................................................................................................ 91 Item 23: Check parameters for validity............................................................................ 91 Item 24: Make defensive copies when needed................................................................. 93 Item 25: Design method signatures carefully................................................................... 96 Item 26: Use overloading judiciously .............................................................................. 97 Item 27: Return zero-length arrays, not nulls................................................................. 101 Item 28: Write doc comments for all exposed API elements......................................... 103 Chapter 7. General Programming.................................................................................. 107 Item 29: Minimize the scope of local variables ............................................................. 107 Item 30: Know and use the libraries............................................................................... 109 Item 31: Avoid float and double if exact answers are required.................................. 112 Item 32: Avoid strings where other types are more appropriate .................................... 114 Item 33: Beware the performance of string concatenation ............................................ 116 Item 34: Refer to objects by their interfaces .................................................................. 117 Item 35: Prefer interfaces to reflection........................................................................... 118 Item 36: Use native methods judiciously ....................................................................... 121 Item 37: Optimize judiciously........................................................................................ 122 Item 38: Adhere to generally accepted naming conventions ......................................... 124 Chapter 8. Exceptions...................................................................................................... 127 Item 39:Use exceptions only for exceptional conditions ............................................... 127 Item 40:Use checked exceptions for recoverable conditions and run-time exceptions for programming errors .................................................................................................. 129 Item 41:Avoid unnecessary use of checked exceptions ................................................. 130 Item 42:Favor the use of standard exceptions................................................................ 132 Item 43: Throw exceptions appropriate to the abstraction............................................. 133 Item 44:Document all exceptions thrown by each method............................................ 135 Item 45:Include failure-capture information in detail messages.................................... 136 Item 46:Strive for </vetbfailure atomicity ..................................................................... 138 Item 47:Don't ignore exceptions .................................................................................... 139 Chapter 9. Threads .......................................................................................................... 141 Item 48: Synchronize access to shared mutable data ..................................................... 141 Item 49: Avoid excessive synchronization..................................................................... 145 Item 50: Never invoke wait outside a loop ................................................................... 149 Item 51: Don't depend on the thread scheduler.............................................................. 151 Item 52: Document thread safety ................................................................................... 154 Item 53: Avoid thread groups......................................................................................... 156 Chapter 10. Serialization ................................................................................................. 158 Item 54: Implement Serializable judiciously ............................................................ 158 Item 55:Consider using a custom serialized form.......................................................... 161 Item 56:Write readObject methods defensively .......................................................... 166 Item 57: Provide a readResolve method when necessary ............................................ 171 References ......................................................................................................................... 174 Effective Java: Programming Language Guide Foreword If a colleague were to say to you, “Spouse of me this night today manufactures the unusual meal in a home. You will join?” three things would likely cross your mind: third, that you had been invited to dinner; second, that English was not your colleague's first language; and first, a good deal of puzzlement. If you have ever studied a second language yourself and then tried to use it outside the classroom,