Dieses Dokument behandelt die "default-" oder Standarderweiterungen, die der "JAVA-Compiler" (javac) in den JAVA-Sourcecode (*.java) vor dem Übersetzen implizit einfügt.
Einstellung | Beschreibung |
import | java.lang.* wird immer importiert. |
extends | Jede Klasse, die nicht explizit von einer anderen Klasse (mit extends)
abgeleitet wird, wird von der Klasse
java.lang.Object abgeleitet. M. a. W.: Jedes Objekt ist ein java.lang.Object. |
"default-Konstruktor" | Wenn kein eigener Konstruktor erzeugt wird, wird ein
argumentloser Konstruktor eingefügt, der nur die Funktion hat, den
Konstruktor der Superklasse aufzurufen:
public XXX() { super(); }Es ist guter Programmierstil, beim Schreiben eines eigenen Konstruktors immer den parameterlosen auch zu erzeugen. Denn der default-Konstruktor wird nicht mehr eingefügt, wenn ein eigener Konstruktor existiert! |
Aufruf des Superkonstruktors | Jedem Konstruktor, der nicht selbst (mit this oder super) einen weiteren Konstruktor aufruft, wird dieser Aufruf implizit eingefügt: super();. |
this | Alle Verwendungen von Objektmethoden und dynamischen Attributen, die nicht das Schlüsselwort this davor enthalten, erhalten dieses implizit. Dies gilt nicht für statische Methoden oder Variablen (static). |
"+"-Operator | Falls Stringobjekte mit "+" verkettet werden, so wird das mit der Methode append() aus StringBuffer durchgeführt. Das gilt auch bei der Zusammenfügung von Stringobjekten mit primitiven Datentypen. Der Compilerhersteller ist frei, ob er tatsächlich StringBuffer.append() verwendet; meist wird es jedoch so gelöst. |
Geschriebener Code | Code von javac erzeugt |
class A { int i; } |
import java.lang.*; class A extends java.lang.Object { int i; public A() { super(); return; } } |
class B extends A { public B(int j) { i = j; } void out() { System.out.println ("i = " + i); } } public interface Inter { void doSomething(); } |
import java.lang.*; class B extends A { public B(int j) { super(); this.i = j; return; } void out() { System.out.println ((new StringBuffer("i = ")) .append(this.i)); return; } } public interface Inter { public abstract void doSomething(); } |
Neben den syntaktischen Defaultwerten hat JAVA auch für jeden Datentyp einen Defaultwert: Siehe Variable.