Allgemein
\"Verluste\":
. kein Präprozessor:
o keine bedingte Compilierung (da plattformunabhängig gedacht)
o benannte Konstanten sind mit final möglich
. keine structs und unions, nur classes
. kein typedef (da alles Klassen sind)
. keine enums (Ersatz durch einzelne final-Konstanten)
. keine inline-Funktionen (eventuell automatisch vom Compiler gehandhabt)
. kein goto (bleibt aber reseviertes Wort), dafür break und continue mit Labels
. kein Überladen von Operatoren (nur von Funktionen, außerdem sind + und += für Strings definiert)
. kein Operator sizeof mehr (es braucht nicht mehr explizit mit Speichergrößen gearbeitet zu werden)
. keine Templates (sind aber durch die JAVA-Art, Objekte zu behandeln, nicht unbedingt notwendig)
Änderungen bei den Typen:
. Typen für Zeichenketten: String (konstant) und StringBuffer (veränderlich)
. Festlegung von Wertebereich und Größe der elementaren Datentypen
. \"echter\" boolean-Typ, der kein Ganzzahltyp ist
. für Bedingungen wird als Ergebnistyp boolean (statt int) gefordert
. der char-Typ ist 16-Bit breit (Unicode)
. kein signed und unsigned, als Ersatz dafür: Vorzeichenunterscheidung beim Rechts-Shiften mit (>> und >>>)
Robustheit:
. automatische Typkonversion, wenn nichts verloren geht z.B.: von float auf double
. keine Pointer (Ersatz durch Objektreferenzen)
. Arrays sind klassen-ähnlich implementiert, Index-Überprüfung zur Laufzeit
. automatische Speicherverwaltung: freigeben, wenn keine Referenz mehr existiert (\"Garbage Collection\")
. Destruktoren kaum verwendet (automatische Speicherverwaltung)
. kein ::-Operator, Ersatz mit . und vollständig qualifizierten Namen
Klassen:
. keine Funktionen, die nicht einer Klasse angehören, alles ist Teil irgendeiner Klasse
. alle Klassen erben von der Klasse Object (alle verwandt)
. interface-Schlüsselwort für eine Art abstrakter Klassen
. keine Mehrfachvererbung (teilweise durch interface ersetzbar)
. Vererbung wird anders implementiert als in C++, funktioniert aber ähnlich
. private, protected und public haben eine andere Interpretation als in C++
. nur eine Art von Vererbung (nicht public oder private)
. kein Semikolon hinter der Klassen-Definition nötig
. Standard-Klassen für Vektoren, Hashtables, etc.
. keine virtual-Funktionen (alle Methoden sind virtuell)
. es werden immer Laufzeit-Typinformationen mitgeführt
Sonstiges:
. an allen Stellen Parameter-Übergabe \"by value\"! Nur bei Objekten \"by reference\"
. keine Vorwärts-Deklaration für Klassen oder Funktionen notwendig
. an allen Stellen automatische Initialisierung durch 0
. leicht unterschiedliche Implementation des Exception-Handlings
. Multithreading als Teil der Sprache
. eingebaute Unterstützung für Dokumentation mit /**-Kommentaren und javadoc
|