Effective Java - Best Practices für die Java-Plattform
von: Joshua Bloch
dpunkt, 2018
ISBN: 9783960886389
Sprache: Deutsch
410 Seiten, Download: 2903 KB
Format: PDF, auch als Online-Lesen
Effective Java | 3 | ||
Impressum | 4 | ||
Inhaltsverzeichnis | 5 | ||
Vorbemerkung | 11 | ||
Vorwort | 13 | ||
Danksagung | 14 | ||
Kapitel 1 - Einleitung | 15 | ||
Kapitel 2 - Objekte erzeugen und auflösen | 19 | ||
2.1 Thema 1: Statische Factory-Methoden als Alternative zu Konstruktoren | 19 | ||
2.2 Thema 2: Erwägen Sie bei zu vielen Konstruktorparametern den Einsatz eines Builders | 24 | ||
2.3 Thema 3: Erzwingen Sie die Singleton-Eigenschaft mit einem private-Konstruktor oder einem Aufzählungstyp | 32 | ||
2.4 Thema 4: Erzwingen Sie die Nicht-Instanziierbarkeit mit einem private-Konstruktor | 34 | ||
2.5 Thema 5: Arbeiten Sie mit Dependency Injection statt Ressourcen direkt einzubinden | 35 | ||
2.6 Thema 6: Vermeiden Sie die Erzeugung unnötiger Objekte | 37 | ||
2.7 Thema 7: Löschen Sie veraltete Objektreferenzen | 41 | ||
2.8 Thema 8: Vermeiden Sie Finalizer und Cleaner | 44 | ||
2.9 Thema 9: Verwenden Sie try-with-resources anstelle von try-finally | 49 | ||
Kapitel 3 - Methoden, die allen Objekten gemeinsam sind | 53 | ||
3.1 Thema 10: Halten Sie beim Überschreiben von equals den allgemeinen Vertrag ein | 53 | ||
3.2 Thema 11: Überschreiben Sie, wenn Sie equals überschreiben, immer auch hashCode | 66 | ||
3.3 Thema 12: Überschreiben Sie immer toString | 71 | ||
3.4 Thema 13: Vorsicht beim Überschreiben von clone | 74 | ||
3.5 Thema 14: Denken Sie darüber nach, Comparable zu implementieren | 83 | ||
Kapitel 4 - Klassen und Schnittstellen | 91 | ||
4.1 Thema 15: Minimieren Sie den Zugriff auf Klassen und Member | 91 | ||
4.2 Thema 16: Verwenden Sie in öffentlichen Klassen Accessor- Methoden und keine öffentlichen Felder | 96 | ||
4.3 Thema 17: Bevorzugen Sie unveränderliche Klassen | 98 | ||
4.4 Thema 18: Ziehen Sie Komposition der Vererbung vor | 106 | ||
4.5 Thema 19: Entwerfen und dokumentieren Sie für Vererbung oder verbieten Sie sie | 112 | ||
4.6 Thema 20: Geben Sie Schnittstellen den Vorzug vor abstrakten Klassen | 118 | ||
4.7 Thema 21: Entwerfen Sie Ihre Schnittstellen für die Nachwelt | 123 | ||
4.8 Thema 22: Verwenden Sie Schnittstellen nur zum Definieren von Typen | 126 | ||
4.9 Thema 23: Arbeiten Sie mit Klassenhierarchien statt mit Tag-Klassen | 128 | ||
4.10 Thema 24: Ziehen Sie statische Member-Klassen den nicht-statischen vor | 131 | ||
4.11 Thema 25: Beschränken Sie Quelltextdateien auf eine einzige Toplevel-Klasse | 135 | ||
Kapitel 5 - Java Generics | 137 | ||
5.1 Thema 26: Hände weg von Rohtypen | 137 | ||
5.2 Thema 27: Eliminieren Sie unchecked-Warnungen | 143 | ||
5.3 Thema 28: Verwenden Sie Listen statt Arrays | 145 | ||
5.4 Thema 29: Bevorzugen Sie generische Typen | 150 | ||
5.5 Thema 30: Bevorzugen Sie generische Methoden | 155 | ||
5.6 Thema 31: Eingeschränkte Wildcard-Typen machen Ihre APIs flexibler | 159 | ||
5.7 Thema 32: Vorsicht beim Kombinieren von Java Generics mit varargs-Methoden | 166 | ||
5.8 Thema 33: Nutzen Sie typsichere heterogene Container | 171 | ||
Kapitel 6 - Aufzählungen und Annotationen | 177 | ||
6.1 Thema 34: Verwenden Sie Aufzählungen statt int- Konstanten | 177 | ||
6.2 Thema 35: Verwenden Sie Instanzfelder statt Ordinalzahlen | 188 | ||
6.3 Thema 36: Verwenden Sie EnumSet statt Bitfelder | 189 | ||
6.4 Thema 37: Verwenden Sie EnumMap statt Ordinalzahlindizierung | 191 | ||
6.5 Thema 38: Emulieren Sie erweiterbare Enums mit Schnittstellen | 196 | ||
6.6 Thema 39: Ziehen Sie die Annotationen den Namensmustern vor | 200 | ||
6.7 Thema 40: Verwenden Sie konsequent die Annotation Override | 208 | ||
6.8 Thema 41: Definieren Sie Typen mit Markierungsschnittstellen | 211 | ||
Kapitel 7 - Lambdas und Streams | 215 | ||
7.1 Thema 42: Lambdas sind oft besser als anonyme Klassen | 215 | ||
7.2 Thema 43: Denken Sie an Methodenreferenzen als Alternative zu Lambdas | 219 | ||
7.3 Thema 44: Verwenden Sie nach Möglichkeit die funktionalen Schnittstellen aus dem Standard | 221 | ||
7.4 Thema 45: Setzen Sie Streams mit Bedacht ein | 226 | ||
7.5 Thema 46: Bevorzugen Sie in Streams Funktionen ohne Nebeneffekte | 234 | ||
7.6 Thema 47: Verwenden Sie als Rückgabewert eher Collection als Stream | 240 | ||
7.7 Thema 48: Seien Sie vorsichtig, wenn Sie Streams parallelisieren | 246 | ||
Kapitel 8 - Methoden | 251 | ||
8.1 Thema 49: Prüfen Sie Parameter auf Gültigkeit | 251 | ||
8.2 Thema 50: Erstellen Sie bei Bedarf defensive Kopien | 254 | ||
8.3 Thema 51: Entwerfen Sie Methodensignaturen sorgfältig | 259 | ||
8.4 Thema 52: Verwenden Sie Überladung mit Bedacht | 261 | ||
8.5 Thema 53: Verwenden Sie varargs mit Bedacht | 268 | ||
8.6 Thema 54: Geben Sie nicht null, sondern leere Sammlungen oder Arrays zurück | 270 | ||
8.7 Thema 55: Verwenden Sie den Rückgabetyp Optional mit Bedacht | 272 | ||
8.8 Thema 56: Schreiben Sie Doc-Kommentare für alle offengelegten API-Elemente | 277 | ||
Kapitel 9 - Allgemeine Programmierung | 285 | ||
9.1 Thema 57: Minimieren Sie den Gültigkeitsbereich lokaler Variablen | 285 | ||
9.2 Thema 58: Ziehen Sie for-each-Schleifen den traditionellen for-Schleifen vor | 288 | ||
9.3 Thema 59: Machen Sie sich mit den Bibliotheken vertraut und nutzen Sie sie | 291 | ||
9.4 Thema 60: Vermeiden Sie float und double, wenn genaue Antworten benötigt werden | 294 | ||
9.5 Thema 61: Ziehen Sie die elementaren Datentypen den Wrapper-Typen vor | 297 | ||
9.6 Thema 62: Vermeiden Sie Strings, wenn andere Typen besser geeignet sind | 300 | ||
9.7 Thema 63: Denken Sie an die Leistungseinbußen bei der String-Verkettung | 303 | ||
9.8 Thema 64: Referenzieren Sie Objekte über ihre Schnittstellen | 304 | ||
9.9 Thema 65: Ziehen Sie Schnittstellen der Java Reflection vor | 306 | ||
9.10 Thema 66: Vorsicht bei der Arbeit mit nativen Methoden | 309 | ||
9.11 Thema 67: Optimieren Sie mit Bedacht | 310 | ||
9.12 Thema 68: Halten Sie sich an die allgemein anerkannten Namenskonventionen | 314 | ||
Kapitel 10 - Ausnahmen | 319 | ||
10.1 Thema 69: Verwenden Sie Ausnahmen nur für Ausnahmebedingungen | 319 | ||
10.2 Thema 70: Verwenden Sie geprüfte Ausnahmen für behebbare Situationen und Laufzeitausnahmen für Programmierfehler | 322 | ||
10.3 Thema 71: Vermeiden Sie den unnötigen Einsatz von geprüften Ausnahmen | 324 | ||
10.4 Thema 72: Ziehen Sie Standardausnahmen vor | 326 | ||
10.5 Thema 73: Werfen Sie Ausnahmen passend zur Abstraktion | 328 | ||
10.6 Thema 74: Dokumentieren Sie alle Ausnahmen, die jede Methode auslöst | 331 | ||
10.7 Thema 75: Geben Sie in Detailnachrichten Fehlerinformationen an | 332 | ||
10.8 Thema 76: Streben Sie nach Fehleratomizität | 334 | ||
10.9 Thema 77: Ignorieren Sie Ausnahmen nicht | 336 | ||
Kapitel 11 - Nebenläufigkeit | 339 | ||
11.1 Thema 78: Synchronisieren Sie den Zugriff auf gemeinsam genutzte, veränderliche Daten | 339 | ||
11.2 Thema 79: Vermeiden Sie übermäßige Synchronisation | 344 | ||
11.3 Thema 80: Ziehen Sie Exekutoren, Aufgaben und Streams den Threads vor | 351 | ||
11.4 Thema 81: Ziehen Sie die Nebenläufigkeitsdienste den Methoden wait und notify vor | 353 | ||
11.5 Thema 82: Dokumentieren Sie die Thread-Sicherheit | 358 | ||
11.6 Thema 83: Verwenden Sie die späte Initialisierung mit Bedacht | 361 | ||
11.7 Thema 84: Verlassen Sie sich nicht auf den Thread-Planer | 365 | ||
Kapitel 12 - Serialisierung | 367 | ||
12.1 Thema 85: Verwenden Sie statt der Java-Serialisierung besser deren Alternativen | 367 | ||
12.2 Thema 86: Implementieren Sie Serializable mit großer Vorsicht | 371 | ||
12.3 Thema 87: Verwenden Sie möglichst eine eigene serialisierte Form | 375 | ||
12.4 Thema 88: Implementieren Sie readObject defensiv | 381 | ||
12.5 Thema 89: Ziehen Sie zur Instanzenkontrolle die Aufzählungstypen der Methode readResolve vor | 387 | ||
12.6 Thema 90: Verwenden Sie möglichst Serialisierungs-Proxys anstelle von serialisierten Instanzen | 391 | ||
Index | 395 | ||
Literatur | 407 |