Vorlesung Informatik 1 - Teil A: Java Kurs
2.9 Methoden: Signatur, Parameter und return-Wert
Der Name, return-Typ und die Parameterliste bilden die Signatur einer Methode.
Überschriebene Methoden haben eine identische Signatur, überladene Methoden unterschiedliche Signaturen.
Die Parameter bei der Definition einer Methode nennt man Formalparameter:
public void berechne(int a, int b, int c){ ... // a, b und c sind die Formalparameter
Beim Aufruf der Methode spricht man von Aktualparametern:
int x=44;
berechne(x, 20, 99); x, 20 und
99 sind Aktualparameter
In Java sind die Aktualparameter immer Kopien der Variablen bzw. Werte des
rufenden Programmes (call by value). Das schützt uns
davor, aus Versehen eine Variable des rufenden Programmes zu überschreiben.
Beispiel:
void tuWas(int x){
x=42;
}
...
int k=5;
tuWas(k);
System.out.println("k="+k); // k hat noch den Wert 5, nicht
42
Wir können uns also darauf verlassen, dass eine Methode, die man ruft, keine unserer
Variablen verändert. Das ist ein großer Vorteil gegenüber manchen anderen Programmiersprachen.
Auch bei Referenz-Datentypen ist der Wert der Aktualparameter eine Kopie. Da diese Variablen immer nur die Adresse eines Objekts enthalten, ist das kein Effizienzproblem, es werden ja nur 4 Bytes kopiert.
Beispiel:
void methode1(JButton b1){
b1 = new
JButton("A");
}
...
JButton b = new JButton("B");
methode1(b);
System.out.println(b.getText());
// gibt 'B' aus
Die Anweisung in methode1 hat keine Auswirkung im rufenden Programm, denn b1 ist eine Kopie von b. Beide zeigen aber auf das gleich Objekt.
Beispiel:
void methode2(JButton b2){
b2.setText("A");
}
...
JButton b = new JButton("B");
methode2(b);
System.out.println(b.getText());
// gibt 'A' aus
Die Anweisung in methode2 ändert das Objekt, auf das b und b2 zeigen.
Deshalb wirkt sich die Änderung im rufenden Programm aus.
Rückgabewert:
Gibt eine Methode ein Objekt zurück, wird auch hier nur die Referenz auf das Objekt zurückgegeben.
Fazit: Java Variablen sind immer Referenzen, niemals die Objekten selbst.