Klasse und Objekt
Eine Klasse ist der Bauplan – sie beschreibt Struktur und Verhalten. Ein Objekt ist eine konkrete Instanz dieser Klasse im Speicher. Eine Klasse kann ohne Objekt existieren, aber kein Objekt ohne Klasse.
Abstrakte Klasse und Interface
Eine abstrakte Klasse kann sowohl implementierten Code als auch abstrakte Methoden enthalten. Ein Interface definiert nur Methoden, die Klassen implementieren müssen. Seit Java 8 können Interfaces auch Default-Methoden besitzen – aber sie haben keine Zustände oder Konstruktoren.
Polymorphismus in Java
Polymorphismus bedeutet, dass ein Objekt in verschiedenen Formen auftreten kann. Eine Variable vom Typ einer Basisklasse kann ein Objekt einer Unterklasse referenzieren. Dadurch können Methoden dynamisch zur Laufzeit aufgerufen werden.
Overloading und Overriding
Overloading passiert innerhalb einer Klasse – gleiche Methodennamen, aber unterschiedliche Parameterlisten. Overriding passiert zwischen Klassen – eine Subklasse überschreibt die Implementierung der Basisklasse, um Verhalten anzupassen.
Was passiert bei new in Java
Die JVM allokiert Speicher auf dem Heap, initialisiert das Objekt über den Konstruktor und gibt eine Referenz zurück. Diese Referenz wird im Stack gespeichert.
String StringBuilder und StringBuffer
String ist unveränderlich, jede Änderung erzeugt ein neues Objekt. StringBuilder ist veränderlich und nicht thread-sicher – schneller. StringBuffer ist thread-sicher, aber langsamer durch Synchronisation.
var final und static
var ermöglicht lokale Typinferenz. final verhindert Änderung nach Zuweisung. static gehört zur Klasse, nicht zur Instanz, und existiert nur einmal im Speicher.
List Set und Map
List ist geordnet und erlaubt Duplikate. Set erlaubt keine Duplikate. Map speichert Schlüssel-Wert-Paare.
Stream und ParallelStream
Streams verarbeiten Daten funktional und sequentiell. ParallelStreams verteilen die Verarbeitung auf mehrere Threads im ForkJoinPool.
Optional in Java
Optional ist ein Wrapper, der ausdrückt, dass ein Wert vorhanden oder nicht vorhanden sein kann. Damit lassen sich NullPointerExceptions vermeiden.
Lambda-Ausdrücke
Lambdas sind Kurzschreibweisen für anonyme Klassen mit einer einzigen Methode.
Record Enum und Class Java 21
Ein record ist eine kompakte Datenklasse mit automatischer Implementierung von Konstruktor equals hashCode und toString. Ein enum repräsentiert eine feste Menge vordefinierter Werte. Eine class ist flexibel und unterstützt Zustand Verhalten und Vererbung.
Compilerzeit- und Laufzeitfehler
Compilerfehler treten bei der Übersetzung auf. Laufzeitfehler entstehen erst während der Programmausführung.
Virtual Threads Java 21
Virtual Threads sind leichtgewichtige Threads aus Project Loom. Sie ermöglichen massive Parallelität auf wenigen OS-Threads.
Daemon- und User-Thread
Ein Daemon-Thread läuft im Hintergrund. Wenn nur noch Daemon-Threads aktiv sind, beendet sich die JVM automatisch. User-Threads müssen explizit beendet werden.
Multithreading in Java
Threads sind parallele Ausführungseinheiten. Sie können mit Thread Runnable ExecutorService oder CompletableFuture erstellt werden.
Checked und Unchecked Exceptions
Checked Exceptions müssen behandelt oder deklariert werden. Unchecked Exceptions entstehen meist durch Programmierfehler.
Garbage Collection in Java
Garbage Collection entfernt automatisch nicht mehr erreichbare Objekte aus dem Heap. Speicher wird ohne manuelles Löschen freigegeben.
Stack und Heap Speicher in Java
Der Stack enthält lokale Variablen und Methodenaufrufe. Der Heap enthält Objekte und wird vom Garbage Collector bereinigt.
Java und Kotlin
Kotlin ist eine moderne JVM-Sprache mit weniger Boilerplate und Null-Safety. Java ist stabiler und weiter verbreitet, besonders im Enterprise-Bereich.
JavaScript und TypeScript
TypeScript erweitert JavaScript um statische Typisierung. Fehler werden bereits beim Kompilieren erkannt.
equals und hashCode
equals vergleicht den inhaltlichen Zustand von Objekten. hashCode wird in Hash-basierten Collections verwendet. Beide müssen konsistent implementiert sein.
== und equals
== vergleicht Referenzen. equals vergleicht Inhalte, wenn es überschrieben wurde.
Immutable Objekt
Ein immutable Objekt kann nach der Erstellung nicht verändert werden. Das erhöht Thread-Sicherheit und Vorhersagbarkeit.
JVM JRE und JDK
Die JVM führt Bytecode aus. Die JRE enthält JVM und Bibliotheken. Das JDK ergänzt Entwicklungswerkzeuge.
Bytecode
Bytecode ist plattformunabhängiger Zwischencode. Er wird von der JVM interpretiert oder kompiliert.
JIT Compiler
Der JIT Compiler übersetzt häufig genutzten Bytecode zur Laufzeit in Maschinencode. Das verbessert die Performance.
Reflection
Reflection erlaubt den Zugriff auf Klassen Methoden und Felder zur Laufzeit. Sie ist mächtig, aber langsamer und fehleranfälliger.
Annotationen
Annotationen liefern Metainformationen für Compiler Frameworks oder Laufzeitlogik. Sie verändern den Code nicht direkt.
Serializable
Serializable ermöglicht die Umwandlung eines Objekts in einen Bytestrom. Das wird z. B. für Persistenz oder Netzwerkübertragung genutzt.
transient
transient verhindert die Serialisierung eines Feldes. Es wird beim Deserialisieren nicht wiederhergestellt.
Thread Safety
Thread-sicherer Code funktioniert korrekt bei paralleler Ausführung. Synchronisation oder Immutability sind typische Mittel.
synchronized
Das synchronized-Schlüsselwort verhindert gleichzeitigen Zugriff auf kritische Codebereiche. Es garantiert Sichtbarkeit und Exklusivität.
volatile
volatile stellt sicher, dass Änderungen an einer Variable sofort für alle Threads sichtbar sind. Es bietet keine atomare Synchronisation.
Deadlock
Ein Deadlock entsteht, wenn Threads sich gegenseitig blockieren. Keiner kann seine Ausführung fortsetzen.
Race Condition
Eine Race Condition tritt auf, wenn das Ergebnis vom zeitlichen Ablauf mehrerer Threads abhängt. Sie führt zu unvorhersehbarem Verhalten.
ExecutorService
ExecutorService verwaltet Thread-Pools und vereinfacht parallele Ausführung. Threads werden wiederverwendet.
CompletableFuture
CompletableFuture ermöglicht asynchrone Berechnungen mit Verkettung. Es unterstützt non-blocking Workflows.
ForkJoinPool
ForkJoinPool ist für rekursive Aufgaben optimiert. Er nutzt Work-Stealing für bessere Auslastung.
Java Memory Model
Das Java Memory Model definiert Regeln für Sichtbarkeit und Reihenfolge von Speicherzugriffen. Es ist entscheidend für Thread-Sicherheit.
Sealed Classes
Sealed Classes beschränken, welche Klassen erben dürfen. Das erhöht Kontrolle und Typsicherheit.
Zuletzt geändertvor einem Monat