12
99 Lernnotizen
Sebastian Eidecker edited this page 2019-10-27 19:10:58 +00:00

Sichtbarkeiten

  • Static-Zugriff aus non-static und umgekehrt!

Einschätzung der Java-Vorteile

  • Sicherheit der Java-Klassen
  • Kommunikation über JVM-Grenzen hinweg

String und Immutibility

  • Je nach Art der Definition unterschiedliches Verhalten ( = "Hallo" vs. new String("Hallo"). == bei erstem true, bei letzterem nicht!

Statische Referenzen

Auf statische Referenzen kann auch über eine null-Referenz zugegriffen werden

Definition primitiver Zahlen

  • int Standard, long muss auchg nur mit Suffix L angegeben werden, wenn größer MAX_INT
  • Long-Wrapper muss mit L als Suffix definiert werden
  • double Standard, float muss mit f angegeben werden (außer Ganzzahl, dann in Ordnung ohne)
  • Float-Wrapper muss immer mit Suffix F deklariert werden.
  • Double-Wrapper: Bei Kommazahl d als Suffix nicht erforderlich, bei Ganzzahl muss D als Suffix angegeben werden.
  • Bei Binär und Hex-Definition Suffixe für double und float nicht erlaubt, L bei long aber schon.
  • Als Folge können Float- und Double-Wrapper nicht in Hex- und Binärschreibweise definiert werden.

Interface-Definition

  • non-nested Interfaces dürfen nicht static deklariert werden

Primitiv-Wrapper und equals

  • Equals auf verschiedenen Wrapper-Typen ist immer false, auch wenn == Vergleich der primitiven true wäre.
  • (== kann auf verschiedenen Typen, die nicht in einer Vererbungshierarchie sind, überhaupt nicht ausgeführt werden)
  • == zwischen Wrapper und Primitivem true, auch wenn 'Typ' unterschiedlich.
  • Equals zwischen Wrapper und Primitiv wie Equals zwischen zwei Wrappern

Finally

  • Finally-Blöcke werden immer ausgeführt.
  • Dies maskiert ggf. return- und throw-Anweisungen in try oder catch-Blöcken
  • Die maskierten Anweisungen werden aber ausgeführt, ggf. Seiteneffekte sichtbar!

Try/catch

  • Wird eine Exception gefangen und im catch-Block eine weitere geworfen, so wird diese neue nicht in einem Catch-Block darunter gefangen
  • In catch-Strukturen müssen spezifischere Exceptions immer weiter oben deklariert werden

Variablen-Deklaration in Methoden

  • int a, b, c = 1 deklariert a und b ohne Zuweisung. c == 1
  • int d = e = 1; NICHT erlaubt

Interfaces und Multivererbung

  • Bei mehrfach deklarierten Feldern Zugriff nicht erlaubt. Von außen Cast, innen Interface-Name.feld möglich.
  • Bei gleichen Default-Implementierungen muss die Klasse die Methode selbst neu implementieren
  • Ist eine Methode in einem Interface default implementiert, in dem anderen nicht, muss die Klasse sie dennoch implementieren. Es wird nicht die Implementierung des einen Interfaces verwendet.

Exception bei statischer Initialisierung

  • ExceptionInInitializerError bei erstem Aufruf
  • Danach java.lang.NoClassDefFoundError
  • Beides sind Errors, keine Exceptions
  • (Bei Fehlern im Konstruktor wird die tatsächlich ausgelöste Exception geworfen, bei jedem Initialisierungsversuch)

Vererbung und privater Konstruktor

  • Hat eine Klasse nur private Konstruktoren ist sie de facto final, keine Klasse kann von ihr erben, da kein Konstruktor aufgerufen werden kann. Was aber erforderlich ist, wenn ein Objekt erzeugt wird.
  • Darauf auch aufpassen, wenn Konstruktor package-Scope hat und erbende Klasse in einem anderen ist!

Ternärer Operator

  • Boolescher Ausdruck ? Ja-Fall : Nein-Fall
  • Ergebnis muss zugewiesen werden
  • Damit muss zwingend ein Ergebnis zurückgeliefert werden, reine Anweisung wie System.out.println nicht möglich, auch kein Block mit return. Aufruf einer Methode, die einen Seiteneffekt ausführt, ist aber möglich.
  • Klammern um Test-Ausdruck nicht erforderlich
  • Verschachtelung möglich

Import

  • Importe nach Package-Deklaration, vor Klassen-Deklaration.
  • Importe gelten für alle Klassen der Datei
  • Statische Importe sind auch innerhalb der Datei erforderlich, wenn eine Klasse auf statische Deklarationen einer anderen (ohne Klassenname) zugreifen will.