Hinweise für Umsteiger (Java)

Aus Infostudium Wiki

Wechseln zu: Navigation, Suche
Insbesondere wenn du als erfahrener Programmierer von anderen Sprachen (C/C++, Delphi/Pascal, VisualBasic, ...) auf Java umsteigst, solltest du dir die folgenden Hinweise durchlesen. Die Lektüre kann aber auch für Programmier-Anfänger nicht schaden, auch wenn du dann sicher von den vielen unbekannten Begriffen erschlagen wirst. Keine Sorge, dass lernst du noch alles...
  • Es gibt in Java keine Pointer, sondern nur Refernzen (Pseudopointer).
  • Ein Konstruktor wird in Java anders, als z.B in C++, nicht impilzit aufgerufen. D.h., z.B. durch
    Klasse objekt;
    wird kein neues Objekt erzeugt, sondern nur eine nicht initialisierte Refernz. Diese muss mit dem 'new'-Operator oder durch eine andere Refernz initialisiert werden.
  • In Java gibt es einen Grabage-Collector, d.h. es ist nicht notwendig oder möglich erzeugte Objekte selbst freizugeben. Ein Objekt wird freigeben, sobalb keine Refernz mehr zu diesem Objekt verweist. Ob der Speicher dann sofort freigegeben wird, bleibt jedoch dem Grabage-Collector überlassen.
  • Durch eine eine Zuweisung wird ein Objekt in Java NICHT kopiert. Es wird nur die Referenz kopiert! Nur triviale Typen (int, float, usw.) werden wirklich kopiert. Um ein Objekt zu kopieren müssen alle Attribute einzeln kopiert werden.
  • Der Vergleichsoperator '==' vergleicht bei Objekten nur die Referenz, NICHT etwa die Attribute! Dies gilt insbesondere auch für Strings! Will man zwei Objekte einer Klasse vergleichen, so sollte man dies mit der equals-Methode tun. Für eigene Klassen, muss man diese noch selbst überschreiben.
  • Der Vergleichsoperator ist in Java (wie auch in C++) der '==' Operator. Der '=' Operator ist in Java eine Zuweisung! Beispielsweise in Pascal vergleicht man mit '=' und eine Zuweisung geht mit ':='. Eine Verwechselung kann sehr merkwürdige Fehler verursachen! In den meisten Fällen wird jedoch, anders als in C++, zumindest eine Fehlermeldung des Java-Precompiliers erfolgen.
  • if-Anweisungen (und ähnliche) können nur den Typ Boolean auswerten, nicht etwa auch Integer oder Pointer wie in C++. Was ich damit meine ist das folgende:
    In C++ könnte man einen int wiefolgt testen:
    if (myInt) { /*...Anweisungen...*/ }

    In Java müsste die Anweisung so aussehen:

    if (myInt != 0) { /*...Anweisungen...*/ }
  • Es ist in Java nicht möglich eine Methode erst nur zu definieren und dann irgendwo später im Quellcode zu deklarieren. Eine Methode muss immer auch direkt definiert werden. Ausnahmen sind natürlich Interfaces und abstrakte Klassen.
  • Es ist in Java nicht möglich von mehr als einer Klasse abzuleiten. Man kann jedoch von mehreren Interfaces ableiten.
  • Ein Interface enthält nur rein virtuelle Methoden, also keinerlei Implementierung. Außerdem sind in Interfaces deklarierte Attribute immer statisch.
  • Erbt man überladene Methoden, kann man einzelne davon überschreiben, ohne die nicht überschriebenen zu verdecken. (Unterschied zu C++)


--Coolcat 23:46, 14. Okt 2006 (CEST)