Links zum Seminar Effektiv Java programmieren
Einführung in Best-Practice Java
- Architektur, Design und Idiom
- Design-Patterns
- Anti-Patterns
- Refactoring
- Aufspüren von Schwachstellen mit Tools (FindBugs, PMD)
- Testen von Anwendungen mit JUnit
Lebenslauf der Objekte
- Design-Pattern Fabrik und Singleton
- Unbeabsichtigtes Template-Pattern
- Hängende Referenzen, Memory Leaks, Heap-Analyzer
- Finalizierung
- Starke und schwache Referenzen: Weak-, Soft- und Phantom-Referenzen
- Builder Pattern
Allgemeines zu Methoden und Methoden aller Objekte
- Argument-Validierungen
- Kopien anlegen
- Signaturen und das Problem der späten Änderung
- Überladene Methoden
- Variable Argumentlisten (Varargs)
- Das Null-Objekt-Pattern
- Javadoc zur Dokumentation
equals
,hashCode
undtoString
ausjava.lang.Object
clone
und Copy-KonstruktorComparable
/Comparator
Klassen und Schnittstellen
- Die Sichtbarkeit im Griff haben
- Immutable Klassen
- Kaufen statt Erben
- Vererbung bewusst steuern oder unbewusst vermeiden
- Schnittstellen oder abstrakte Klassen?
- Markierungsschnittstellen (Marker-Interfaces)
- Innere Klassen, statische Mitgliedsklassen
- Funktionszeiger objektorientiert realisieren: Das Befehlsmuster (Command Pattern)
Aufzählungen typsicher implementieren
enum
und Methoden- EnumSet
(EnumSet-API)
EnumMap
- Aufzählungen ohne Java 5 typsicher modellieren
Allgemeine Programmierhinweise
- Sichtbarkeit lokaler Variablen minimieren
- Standard-Klassenbibliotheken kennen und dazu die bunte Open Source-Welt
- Genauigkeiten bei
float
,double
,BigDecimal
- Probleme vom Autoboxing vermeiden
- Strings und ihre Laufzeiteigenschaften
- Schnittstellenorientierte Programmierung
- Spezielle Reflection-Szenarien durch Schnittstellen abbilden
- Namenskonventionen
- Das Problem der nativen Methoden
- Optimierung, Performance-Messungen (Profiling), Tools
Ausnahmen (Exceptions)
- Ausnahmen oder Rückgabewerte?
- Wann geprüfte und ungeprüfte Ausnahmen?
- Die Exception-Hierarchie der Standard-Bibliotheken kennen und nutzen
- Der Einsatz von
Error
- Ausnahmetypen bei Schichten-Architekturen
- Dokumentieren von Ausnahmen und vollständige Stack-Traces
- Zum
catch(Exception e) {}
- Assertions
- Zusicherungen mit Annotationen (JSR 308: Annotations on Java Types),
@NotNull
Nebenläufigkeit mit Threads
- Was synchronisiert werden muss
- Nebenläufigkeit nicht behindern
wait
/await
in Schleifen- Der Thread-Scheduler und Thread-Prioritäten
- Nebenläufigkeit dokumentieren
- Thread-Gruppen
Serialisation
- Die Schnittstelle
Serializable
- Versionierung
- Standard-Serialisierung und angepasste Serialisierung durch
readObject
/writeObject
- Die Aufgabe von
readResolve
- Serialization Proxies
Generics
- Wiederholung zentraler Konzepte
- Generische Typen, Raw-Types, unchecked-Meldungen
- Listen mit Generics statt Arrays ohne Generics
- Bounded Wildcards
- Typsichere heterogene Container