Page:
ZZZ: 01 Kapitel 1
Pages
Überladen und Überschreiben von Methoden
99 Lernnotizen
Aufpassen!
Calendar API
Enums
Exam Watch
Garbage Collection
Initialisieurngsreihenfolge
Interfaces
Label, break, continue
Lambda Ausdrücke (Predicate)
Operator Rangfolge
Primitive Datentypen
Switch Anweisung
ZZZ: 00 Allgemeines
ZZZ: 01 Kapitel 1
ZZZ: 02 Kapitel 2
Clone
1
ZZZ: 01 Kapitel 1
Sebastian Eidecker edited this page 2019-11-16 11:18:37 +00:00
Import-Statements
- Compile-Fehler, wenn Static-Imports nicht eindeutig sind. Aber erst bei Nutzung, nicht bei ungenutztem Import.
import static, umgekehrt ompile-Fehlerimport staticbezieht sich immer auf das Objekt selbst.import static System.out;kann perout.println()genutzt werden.import statickann überladene Methoden mit einem Statement importieren.import statickann keine Klassen importieren.- Nur statische Dinge können statisch importiert werden.
- Import von nicht sichtbaren Klassen führt zu einem Compilefehler
Identifier
- Zahlen, Dollarzeichen, Buchstaben, Unterstrich erlaubt. Erstes Zeichen keine Zahl.
Packages
- Dürfen keine Minuszeichen enthalten
Klassen
- Nur eine
public-Klasse pro Datei, dann Dateiname gleich Klassenname - Datei ohne
public-Klasse erlaubt - Innere Klassen nicht Teil des OCA-Tests
- Default-access: Nur im selben Paket sichtbar. Auch nicht in Unterpaketen.
- Klassen können nicht gleichzeitig
finalundabstractdeklariert werden
Strictfp
- Semantik nicht relevant für OCA
- Kann auf Klassen- und Methodenebene deklariert werden, nicht auf Feldebene.
- Kennzeichnet Konformität für Fließkommaberechnungen nach IEEE 754, damit plattformunabhängig
- Nicht mit
abstractundnativekombinierbar
String
Stringist final deklariert (und auch sonst eine Besonderheit)
abstract
- Enthält eine Klasse eine Methode, die
abstractdeklariert ist, muss auch die Klasseabstractdeklariert werden. abstractdeklarierte Methoden müssen mit einem Semikolon beendet werden, Rumpf ist nicht erlaubt.- Nicht
abstractdeklarierte Methoden müssen einen Rumpf haben. - In einer abstrakten Klasse dürfen nicht absktrakte Methoden implementiert werden
Interfaces
- Ein Interface ist ein Vertrag
abstract-Deklaration implizit, darf notiert werden- Seit Java 8 konkrete Implementierungen möglich (mit Einschränkungen)
- In einem Interface deklarierte Methoden sind implizit
abstractundpublic(wenn nichtdefaultoderstaticangegeben wird). Modifier können dennoch hinzugefügt werden. Konkurrierende Modifier sind nicht erlaubt. final, strictfp, nativedeklarierte Methoden sind in Interfaces nicht möglich- Alle Variablen sind implizit
public static final. Dies kann, muss aber nicht notiert werden. - Interfaces können beliebig viele andere Interfaces
extenden, aber keine Klassen und auch nicht implementieren - Methoden können
defaultoderstaticsein. Unterschied! default-Methoden sind implizit public. Müssen einen Rumpf besitzen.- Nur Methoden können
defaultsein. static-Methoden auch implizit public, müssen Rumpf haben.finalebenfalls nicht erlaubt. Referenzierung über Interface-Namen.
Access
- Zugriff und Vererbung unterscheiden
- Kein Modifier: Implizit (Interfaces) oder package private
- Wenn ererbt, dann hat eine Klasse den
member, als ob selbst deklariert (Vorsicht bei statischen Membern, diese werden nicht vererbt!) - Vererbte Methoden dürfen öffentlicher deklariert werden, nicht aber privater
- Private Methoden werden nicht vererbt und sind in der Unterklasse nicht sichtbar. Es können Methoden mit derselben Signatur deklariert werden. Sind dann aber dennoch nicht ererbt!
- Default access nur im selben Paket sichtbar. Auch nicht in Unerklassen.
protectedim selben Paket und in Unterklassen sichtbar. Für Unterklassen auch in einem anderen Paket. Zugriff dann aber nicht per .-Referenz möglich, nur persuper.Kann aber überschrieben werden.protectedFelder können in Unterklassen genutzt werden, da diese vererbt werden. (Nicht aber in anderen Instanzen der Oberklasse, die als Referenz bekannt sind)- Ererbte
protected-Member werdenprivate, können aber weiterhin vererbt werden! (Todo: Test schreiben!) - Lokale Variablen könnnen keine Access-Modifier haben. Compile-Fehler. Nur
finalmöglich.
this
thisbezieht sich immer auf das aktuell ausgeführte Objekt. Ist implizit, kann aber anegeben werden.
final
final-Methoden können nicht überschrieben werden. (Fallstricke bei final und Access-Modifiern. Compile-Fehler oder einfach neu definiert!)Stringistfinal- Klassen mit
final-Methoden können überschrieben werden. final-Parameter können nicht neu zugewiesen werden (sind aber nicht immutable)- Lokale
final-Variablen auch nicht.
abstract
- Abstracte Klassen dürfen konkrete Methoden besitzen
- Erbende Klassen müssen alle abstrakten Methoden der Oberklasse implementieren oder selbst abstrakt sein.
- Todo: Sind
abstract-Methoden immerpublic. (Nein!) Wenn nicht, kann package access lästig sein, weil eine Klasse ggf. nicht implementieren kann! (Ja!). Unterklasse dieser Klasse im selben Package geht aber (SubOfSubOfAbstract). Da steigt aber auch Intellij aus. - Niemals
abstractundfinalgemeinsam!
synchronized
- Nur für Methoden erlaubt
- Zugrff nur für einen Thread gleichzeitig
- Fr OCA8 nicht weiter relevant
native
- Nur für Methoden erlaubt
- Analog
abstractohne Rumpf - Für OCA8 ansonsten nicht relevant.
- Nicht mit
abstractkombinierbar, aber mitstatic,finalund Access-Modifiern
vararg (...)
- Wie Array
- Typ, gefolgt von ...
- Primitive oder Klassen möglich
- Nur ein Parameter dieser Art, immer als letzter deklariert
Konstruktoren
- Name exakt wie Klassenname
- Können Access-Modifier und beliebige Parameter haben
- Nicht
static,finaloderabstract - Kein Rückgabewert. Methoden mit selbem Namen dürfen deklariert werden!
Variablen
- Primitive:
char,boolean,byte,short,int,long,double,float. (Und Arrays) - Referenzen
- Multiple Deklaration desselben Typs in einer Zeile möglich
- Todo: Wertebereiche der Zahlentypen lernen (Seite 76)
- char: 16-bit Unicode
- Instanzvariablen: Access (private, package, protected, public), final, transient. Nicht abstract, synchronized, strictfp, native. Static macht sie zu Klassenvariablen.
- Lokale Variablen innerhalb von Methoden.
- Werden bei Beginn der Methode initialisiert, nach der Methode zerstört.
- Immer auf dem Stack, Objekt aber im Heap. Keine Access-Modifier.
- Sichtbar ab Deklaration, inneralb des Blocks, in dem sie definiert wurden
- Müssen vor Verwendung initialisiert werden. Keine Standardwerte wie Instanzvariablen oder Klassenvariablen
- Können selben Namen wie Instanz- und Klassenvariablen haben. Überdecken diese dann (
thisrefernziert ggf. wieder auf Instanz).
Arrays
- Aus Primitiven oder Objektreferenzen
- Inhalte eines Typs
- Größe bei Initialisierung festgelegt, nicht änderbar
- Deklaration mit
[], nach Typ oder nach Name, nicht vor Typ. - Multidimensional mit mehreren
[], auchString [] name []möglich. - Größe kann nicht in der Delaration angegeben werden.
transient
- Wird nicht serialisiert
- Nicht mehr relevant für OCA8
volatile
- Nicht relevant für OCA8
static
- Methoden, Variablen, innere Klassen, innere Interfaces, Initialisierungsblöcke
- Einmalig pro Klasse, vor Erzeugung der Klasse erstellt
- Nicht zulässig für Konstruktoren, Klassen, Interfaces, lokale Variablen
Enums
- Können als eigene Klasse oder als class member deklariert werden. Nicht innerhalb einer Methode.
- Beginnen mit Aufzählung der Instanzen. (Semikolon am Ende nicht erforderich)
- Können Konstruktoren, Methoden und Variablen enthalten
- Dann Semikolon am Ende der Instanzen erforderlich!
- Instanzen immer an erster Stelle!
- Konstruktor darf nicht public sein, kann nicht instanziiert werden.
values()liefert Array in Reihenfolge der Deklaration;
static
- Zugriff auf statische Member über nicht initialisierte statische Variable möglich. Klassen und Enums.