Effective Java (eBook)
410 Seiten
dpunkt (Verlag)
978-3-96088-638-9 (ISBN)
Joshua Bloch ist Professor an der Carnegie Mellon University. Er war früher Chief Java Architect bei Google, ein Distinguished Engineer bei Sun Microsystems sowie Senior System Designer bei Transarc. Er leitete das Design und die Implementierung zahlreicher Java- Plattformfunktionen, einschließlich der JDK-5.0-Spracherweiterungen und des Java-Collections-Frameworks. Er hat einen Ph.D. in Informatik von der Carnegie Mellon University und einen B.S. in Informatik von der Columbia University.
Joshua Bloch ist Professor an der Carnegie Mellon University. Er war früher Chief Java Architect bei Google, ein Distinguished Engineer bei Sun Microsystems sowie Senior System Designer bei Transarc. Er leitete das Design und die Implementierung zahlreicher Java- Plattformfunktionen, einschließlich der JDK-5.0-Spracherweiterungen und des Java-Collections-Frameworks. Er hat einen Ph.D. in Informatik von der Carnegie Mellon University und einen B.S. in Informatik von der Columbia University.
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
Erscheint lt. Verlag | 1.10.2018 |
---|---|
Reihe/Serie | Programmieren mit Java | Programmieren mit Java |
Übersetzer | Dirk Louis |
Verlagsort | Heidelberg |
Sprache | deutsch |
Themenwelt | Informatik ► Programmiersprachen / -werkzeuge ► Java |
Schlagworte | Annotationen • Enums • Funktionale Programmierung • Generics • interfaces • Jakarta EE • java 9 • Java EE • Klassen • lambdas • Module • Parallele Programmierung • Serialisierung • Streams |
ISBN-10 | 3-96088-638-1 / 3960886381 |
ISBN-13 | 978-3-96088-638-9 / 9783960886389 |
Haben Sie eine Frage zum Produkt? |
Größe: 2,9 MB
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich