Grobe Themenübersicht
A. Java-Grundlagen: Datentypen, Ausdrücke, Kontrollstrukturen, Arrays
B. Syntax: Reguläre Ausdrücke, Syntaxbäume, Kontrollflussdiagramme
C. Rekursion
D. Objektorientierung (Klassen, Objekte, Listen, Interfaces, ...) und Vererbung
E. Sortier- und Suchalgorithmen
F. Polymorphie
G. Threads
Zur
Orientierung habe ich mir die Themen der Vorlesung grob
zusammengefasst. Die nachfolgende Zusammenfassung habe ich eigentlich
nur für mich erstellt (bspw. zur Erstellung obiger Übersicht). Die Nummern in Klammern beziehen sich auf die Kapitel im Vorlesungsskript.
Grundlagen (2)
- Variablen/Datentypen
- statische Typisierung (steht schon bei Kompilierung fest)
- primitive Datentypen vs. Referenzdatentypen
- primitive Datentypen (5.1; blatt 4)
- Ganze Zahlen
- Gleitkommazahlen
- Gruppierung mit _ (zwischen Ziffer)
- boolean (1): true, false
- implizite Typecasts (Folie 98): byte -> short -> int -> long -> float -> double, char -> int; implizit zu String, falls einer der beiden String ist, sonst nicht
Casting von int/long nach float wird durchgeführt, kann aber zu Informationsverlust führen
Auswertung von Ausdrücken (5.3, 107)
- Referenzdatentypen:
- String (5.2)
- Arrays (5.4): type[] name, type name[], new int[5], new int[]{1, 2, 3};
- Wrapper-Klassen: Integer.byteValue
- Operatoren (5.3) (http://bmanolov.free.fr/javaoperators.php)
- Zuweisung (=): Achtung: Zuweisung ist Ausdruck mit Wert = Wert nach Zuweisung (rechte Seite) (a = b = c++)
- arithmetische Operatoren (+, -, *, /, %, unär +/-); sind nur für int, long, float & double definiert, d. h. short, byte, char -> int
- Konkatenationsoperator (+) (5.2)
- Vergleichsoperatoren (==, !=, >, <, >=, <=, instanceof): Vorsicht: bool x = false, if (x = true) print error
- boolesche Operatoren (!, &&, ||, ^), davon &&, || Kurzschlussauswertung
- bitweise Operatoren (~, &, |, ^), Shifts (<<, >>, >>>)
- zusammengesetzte Zuweisungsoperatoren (+=, -=, /=, ...) a += b <=> a = (type(a)) (a + b)
- Post-/Pre-inkrement/dekrement (++, ++, --, --); x++ entspricht x = (type(x)) (x + 1)
- ternärer Operator / Bedingungsoperator (?:) (9)
- Präzedenzordnungen (höhere Priorität -> zuerst ausgewertet)
- Fallstricke: ++y++ syntaktisch inkorrekt (Ink. braucht Variable)
kein Zurücksetzen der Variablen bspw. in a++ == ++b || --a == b
- Kontrollstrukturen
- Selektion (bedingte Anweisung, if-Abfrage)
- Iterationen (Schleifen):
- while: Vergleich - ss
- for (5.5): Init. - Vergleich - ss - Ink./Dek. (Manipulation)
- do-while: ss - Vergleich
- switch (e) {case x: ss break; default: ss} (9)
- Verlassen durch break und return, continue
- Kommentare (// /* */)
- Klassen: (max.) eine öffentliche Klasse mit gleichem Dateinamen pro Datei
- Funktionen (5.6)
Syntax (3):
- Syntax (Lehre vom Satzbau) <-> Semantik (Lehre von der Bedeutung)
- reguläre Ausdrücke (::=, Alternative, Iter., Konkat. Opt.; rechte Seite nur Terminale/Tokens)
- Syntaxbäume: Blätter: Wörter/Terminale, innere Knoten: Nichtterminale
- Kontextfreie Grammatiken (rechts steht ein nicht entfernbares Nichtterminal), Erweiterte Backus-Naur-Form = Sprache zur Darstellung kf Grammatiken
Kontrollflussdiagramme (4)
- Start (Deklarationen) und Stop
- Anweisungen (insb. Zuweisungen)
- Bedingungen
- Ein-/Ausgabe
- Kanten, Kantenzusammenlauf
Speicherverwaltung (6):
- Heap, Stack, statisch
- Call by Value/Reference
- Rekursion
- Memoisation
Sortieren (7):
- Insertionssort
Suchen (8):
- naives Suchen
- binäre Suche
- Endrekursion
Objektorientierung (10):
- Klassen, Objekte
- innere Klassen
- Selbstreferenz this
- Klassenattribute, Objektattribute
- Klassenmethoden
Abstrakte Datentypen (11):
- Listen (11.1), Mergesort
- Stacks (11.2)
- Queue (11.3)
Vererbung (12):
- Schlüsselwort super
- Verschattung
- Überschreiben von Methoden
Polymorphie (13):
- statischer vs. dynamischer Typ
- Überladen
- Object
- Generics (13.2)
- Wrapper-Klassen (13.3)
Abstrakte Klassen, finale Klassen, Interfaces (14)
- abstrakte Methoden, Klassen
- final
- (funktionale = genau 1 methode) Interfaces
Fehler / Error/Exceptions (15):
- Fehlerklassen: checked/unchecked
- try catch finally
- selbstdefinierte Fehlerklassen
Threads (16):
- Scheduling
- Zustände
- Futures
- Deadlock
- Monitore
- Locks/synchronized
- Semaphore
- wait/notify (Consumer/Producer)
Weiteres:
- anonyme Klassen
- Iteratoren
(- Lambda-Asudrücke)
(- Methodenreferenzen)
(- GUIs)
(- Collections: Set, Map, ...)