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
Schlagworten
kurz zusammengefasst. Die jeweilige Überschrift verlinkt auf das Dokument mit allen Inhalten zum entsprechenden Thema.
Einstieg
Benötigte Software
JDK
Eclipse IDE
Download
Installation
…
Die Programmiersprache Java
Warum Java?
Warum nicht?
Besonderheiten
Java Platform
Java Ecosystem
Packages
Hello World!
…
Eclipse IDE
IDE
Warum Eclipse?
Workspaces
Views
Editor
Die wichtigsten Funktionen
Import
Export
Console
Ausführen von Programmen
Automatisch generierter Code
…
Grundlagen
“Hello World!” und die main
-Methode
Das erste Programm
Was ist das alles?
main
Packages, package
und import
Packages
Pakete
Paket-Pfade
package
import
Kommentare
// inline
/* multi-line */
Variablen
Was ist das?
Syntax
naming conventions
Typisierung
…
Datentypen
primitive Datentypen
komplexe Datentypen
byte
short
int
long
float
double
boolean
char
default-Werte
Wrapper-Klassen
…
Casting
Typumwandlung
implizit
explizit
upcast
downcast
cast-Operator
Casting bei komplexen Datentypen
…
Operatoren
Rechenoperatoren
Vergleichsoperatoren
logische Operatoren
Zuweisungsoperatoren
+
-
*
/
%
++
--
==
!=
>
<
>=
<=
&&
||
=
+=
-=
/=
*=
%=
&=
|=
…
Strings / Zeichenketten
die Klasse "String"
Literals
special characters
Unveränderbarkeit von Strings
UTF-16
String Formatting
…
Methoden
Rückgabewerte
Parameter/Argumente
return
Überlagerung
Java ist immer pass-by-value
…
Conditional statements / Konditionale
if
else
:? (Ternary-Operator)
switch
Schleifen
while
do-while
for
for-each
Arrays
Datenstrukturen
Deklaration
Typisierung
Initialisierung
Array Literals
Zugriff
Mehrdimensionale Arrays
…
Fehlerbehandlung
Error
Exception
try
catch
finally
try-with-resources
throws
…
Dokumentation mit Javadoc
Wozu?
/**
@param
@return
<code></code>
best practices
…
Objektorientierte Programmierung (OOP)
OOP, Klassen und Objekte
Definition
Nutzen
Beispiele
Klasse
Objekt
Kuchen
…
Objekte I: Initialisierung, Members, Zugriff
new-Operator
Instanzvariablen
Instanzmethoden
Zugriffs-/Sichtbarkeitsmodifizierer
private
(default)
protected
public
this
Getter
Setter
Konstruktoren
…
Static Members
static
Klassenvariablen
statische Methoden
…
Vererbung I: Grundlagen
Wozu?
Terminologie
extends
super
instanceof-Operator
Überschreiben von Methoden
…
final
final
finale Variablen
finale Klassen
finale Methoden
Konstanten in Java
…
Objekte II: Repräsentation, Identität, Gleichheit
toString()
Objekt-Identität
Objekt-Gleichheit
equals()
hashCode()
Der Vertrag zwischen equals() und hashCode()
…
Vererbung II: Abstrakte Klassen und Methoden
abstrakte Klassen
abstrakte Methoden
abstract
…
Vererbung III: Interfaces
Interfaces
Erweiterung von Interfaces
Default-Methoden
Statische Methoden in Interfaces
…
Innere und anonyme Klassen
Anonyme Klassen
Innere Klassen
…
Abstrakte Konzepte und Fortgeschrittenes
Input / Output (I/O)
Streams
Buffering
Reader
Writer
Objektserialisierung
User-Input über Stdin
…
Datenstrukturen
verkettete Listen
zweifach verkettete Listen
Binärbäume
binäre Suchbäume
siehe auch "Collections Framework"!
…
Iterable
und Iterator
Iterable
Iterator
Bezug zu for-each
Implementierung
…
Generics
Was?
Wozu?
<Syntax>
Typsicherheit trotz generischer Programmierung
Gültigkeit bei Kompilierung und zur Laufzeit
…
Collections Framework
Aufbau
List
Set
Map
Objekt-Identität im Kontext von HashMaps/HashSets
…
Enums
Enums
…
Rekursion
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
Vergleichen und Sortieren
Comparable
Comparator
Collections.sort()
Sortieralgorithmen
…
Multithreading
Prozess
Thread
Runnable
synchronized
volatile
…
Programmbibliotheken
Was?
Wozu?
Wie werden sie eingebunden?
Maven
Gradle
…
Unit-Tests
Wozu?
Schreiben von Unit-Tests
Test-driven-development
JUnit
…
Ü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!