Softwaretechnologie: Java
Ein Wegweiser zur Java-Programmierung, der mit seinen Aufgaben wächst. Für die Teilnehmer*innen des Moduls “Softwaretechnologie: Java” der Studiengänge Informationsverarbeitung und Medieninformatik am IDH (Institut für Digital Humanities, Universität zu Köln) und für alle Interessierten! 👐
Work in progress. 🚧 🐌 Diese Lern- und Orientierungs-Ressource ist weit davon entfernt, vollständig zu sein. Aber das ist okay. Wenn dir auffällt, dass etwas Wichtiges fehlt oder unzureichend erläutert ist, dann eröffne ein Issue oder trage eigene Änderungen bei!
Übrigens 💬
📖 Inhalt — Zum Inhaltsverzeichnis springen! 🤔 Was ist das hier — Bzw. was ist es nicht? 👩💻 Contributing — Oder: Wie kann ich hier mitwirken? 🛋️ Lese-Ansicht — Wenn du aus Versehen im Repository gelandet bist! 📕 Glossar — Allgemeine Terminologie der Programmierung (wichtig)! 🔗 Link-Liste — Weitere empfehlenswerte (online-) Ressourcen! 🏷 Java Naming Conventions …wollen befolgt werden!
Inhalt 📖
👉 Die einzelnen Themenbereiche sind hier mit
Schlagwortenkurz zusammengefasst. Die jeweilige Überschrift verlinkt auf das Dokument mit allen Inhalten zum entsprechenden Thema.
Einstieg
Benötigte Software
JDKEclipse IDEDownloadInstallation…
Die Programmiersprache Java
Warum Java?Warum nicht?BesonderheitenJava PlatformJava EcosystemPackagesHello World!…
Eclipse IDE
IDEWarum Eclipse?WorkspacesViewsEditorDie wichtigsten FunktionenImportExportConsoleAusführen von ProgrammenAutomatisch generierter Code…
Grundlagen
“Hello World!” und die main-Methode
Das erste ProgrammWas ist das alles?main
Packages, package und import
PackagesPaketePaket-Pfadepackageimport
Kommentare
// inline/* multi-line */
Variablen
Was ist das?Syntaxnaming conventionsTypisierung…
Datentypen
primitive Datentypenkomplexe Datentypenbyteshortintlongfloatdoublebooleanchardefault-WerteWrapper-Klassen…
Casting
Typumwandlungimplizitexplizitupcastdowncastcast-OperatorCasting bei komplexen Datentypen…
Operatoren
RechenoperatorenVergleichsoperatorenlogische OperatorenZuweisungsoperatoren+-*/%++--==!=><>=<=&&||=+=-=/=*=%=&=|=…
Strings / Zeichenketten
die Klasse "String"Literalsspecial charactersUnveränderbarkeit von StringsUTF-16String Formatting…
Methoden
RückgabewerteParameter/ArgumentereturnÜberlagerungJava ist immer pass-by-value…
Conditional statements / Konditionale
ifelse:? (Ternary-Operator)switch
Schleifen
whiledo-whileforfor-each
Arrays
DatenstrukturenDeklarationTypisierungInitialisierungArray LiteralsZugriffMehrdimensionale Arrays…
Fehlerbehandlung
ErrorExceptiontrycatchfinallytry-with-resourcesthrows…
Dokumentation mit Javadoc
Wozu?/**@param@return<code></code>best practices…
Objektorientierte Programmierung (OOP)
OOP, Klassen und Objekte
DefinitionNutzenBeispieleKlasseObjektKuchen…
Objekte I: Initialisierung, Members, Zugriff
new-OperatorInstanzvariablenInstanzmethodenZugriffs-/Sichtbarkeitsmodifiziererprivate(default)protectedpublicthisGetterSetterKonstruktoren…
Static Members
staticKlassenvariablenstatische Methoden…
Vererbung I: Grundlagen
Wozu?Terminologieextendssuperinstanceof-OperatorÜberschreiben von Methoden…
final
finalfinale Variablenfinale Klassenfinale MethodenKonstanten in Java…
Objekte II: Repräsentation, Identität, Gleichheit
toString()Objekt-IdentitätObjekt-Gleichheitequals()hashCode()Der Vertrag zwischen equals() und hashCode()…
Vererbung II: Abstrakte Klassen und Methoden
abstrakte Klassenabstrakte Methodenabstract…
Vererbung III: Interfaces
InterfacesErweiterung von InterfacesDefault-MethodenStatische Methoden in Interfaces…
Innere und anonyme Klassen
Anonyme KlassenInnere Klassen…
Abstrakte Konzepte und Fortgeschrittenes
Input / Output (I/O)
StreamsBufferingReaderWriterObjektserialisierungUser-Input über Stdin…
Datenstrukturen
verkettete Listenzweifach verkettete ListenBinärbäumebinäre Suchbäumesiehe auch "Collections Framework"!…
Iterable und Iterator
IterableIteratorBezug zu for-eachImplementierung…
Generics
Was?Wozu?<Syntax>Typsicherheit trotz generischer ProgrammierungGültigkeit bei Kompilierung und zur Laufzeit…
Collections Framework
AufbauListSetMapObjekt-Identität im Kontext von HashMaps/HashSets…
Enums
Enums…
Rekursion
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
Vergleichen und Sortieren
ComparableComparatorCollections.sort()Sortieralgorithmen…
Multithreading
ProzessThreadRunnablesynchronizedvolatile…
Programmbibliotheken
Was?Wozu?Wie werden sie eingebunden?MavenGradle…
Unit-Tests
Wozu?Schreiben von Unit-TestsTest-driven-developmentJUnit…
Über den Seminarinhalt hinaus …
… gehen die folgenden Themen. Das heißt jedoch nicht, dass sie nicht wichtig wären. Wer das Gelernte noch weiter vertiefen oder ergänzen möchte, kann sich von diesen Empfehlungen leiten lassen:
Java Stream API
🔗 Introduction to Java 8 Streams (baeldung.com) 🔗 The Java 8 Stream API Tutorial (baeldung.com) 🔗 String Operations with Java Streams (baeldung.com) 🔗 Java Stream API (tutorials.jenkov.com)
Lambda Expressions und Functional Interfaces
🔗 Lambda Expressions (docs.oracle.com) 🔗 Java Functional Interfaces (beginnersbook.com) 🔗 Lambda Expressions and Functional Interfaces: Tips and Best Practices (baeldung.com)
Statische Methoden in Interfaces
🔗 Static and Default Methods in Interfaces in Java (baeldung.com) 🔗 Default and Static Methods in Interfaces in Java 8 (codenuclear.com)
Contributors ✨
Das ist alles. Bis jetzt! Wie wäre es mit deinem Beitrag?
Dank für die Mitarbeit an diesem Repository gebührt den folgenden fleißigen Mitwirkenden (emoji legende):
|
bkis 🖋 💡 🤔 🚧 |
Nicolas David Werner 🖋 💡 |
Lelalue 🖋 💡 |
mkamphausen 🖋 💡 |
Julian Kamphausen 🖋 💡 |
Demirro 🤔 |
|
Valeria Gavrilova 🐛 |
jspringe 🖋 |
Sandeep Mishra 🖋 |
👉 Dieses Projekt folgt der all-contributors-Spezifikation. Contributions (Beiträge) jeder Art sind willkommen und werden an dieser Stelle wie oben zu sehen aufgeführt!