Java- was sind aufrufparameter und rückgabewerte?

4 Antworten

Aufrufparameter und Rückgabewerte sind Kommunikationsmechanismen mit Funktionen (inklusive Objektmethoden).

Wenn Du eine Funktion aufrufst, dann rufst Du einen bestimmten - abgegrenzten - Code-Abschnitt auf, welcher eine bestimmte Aufgabe erfüllen soll.

Aufrufparameter: Du gibst der Funktion, der Methode, dem Code-Abschnitt bestimmte Werte mit, welche die Funktion (etc.) für ihre Aufgabe benötigt. Deine Funktion soll beispielsweise die Fläche eines Rechteckes berechnen. Du gibt der Funktion daher die beiden Werte für die Länge und die Breite mit, z.B.

int laenge=10;
int breite=20;
Gib_mir_Fläche_von_Rechteck(laenge,breite);

oder

Objectxy Rechteck = Objectxy(wert_fuer_laenge,wert_fuer_breite);
Rechteck.Flaeche;

Rückgabewert: Jetzt hast Du oben die Werte der Funktion / Methode übergeben. Aber wie bekommst Du das Ergebnis mit? Dafür muss Dir die Funktion / Methode diesen Wert geben. Das macht er dann, wenn der berechnete Wert in der Funktion hinter return gestellt wird.

In der Funktion / in der Methode:

return arg_laenge * arg_breite;

Dann gibt die Funktion, die Methode einen Wert zurück. Das bedeutet, Du kannst aus der Methode den Wert ziehen, z.B.

int flaeche = Gib_mir_Flaeche_von_Rechteck(laenge,breite);
Ausgabe_befehl(Gib_mir_Flaeche_von_Rechteck(laenge,breite));

Dafür muss die Methodendeklaration aber genau bezeichnen, was für ein Rückgabetyp vorgesehen ist.

Aber Vorsicht: Frage Dich immer: Übergibst Du Wert oder Referenz? Adresse oder Kopie?

Der Sache nach werden Übergabewerte (in die Methode: Aufrufparameter, aus der Methode zurück: Rückgabewerte) in der Regel über den Stack abgebildet, in dem die Werte jeweils auf den Stack abgelegt werden, von wo der andere Code-Abschnitt ihn dann ziehen kann. Damit der übernehmende Code-Abschnitt weiß, was er sich an Abrufparameter holen muss, wird in der Methoden-Deklaration definiert, was alles an Speichergrößen/abschnitten gefüllt wird bzw. beim Rückgabewert durch Definition der Rückgabevariable.

Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich

1)

Mit Aufrufparameter meinst du wohl tatsächliche Parameter bzw. Argumente. Das sind die konkreten Werte, die einer Funktion bei Aufruf übergeben werden.

Ein Beispiel:

public static int berechneQuotient(int dividend, int divisor){
  if (divisor == 0) {
    throw new ArithmeticException("Division durch 0 ist nicht möglich.");
  }

return dividend / divisor; }

public static void main(String[] args){ int quotient = berechneQuotient(4, 2); }

Hier sind 4 und 2 die Argumente, die an die Methode berechneQuotient bei ihrem Aufruf übergeben werden. Sie werden dann in ihre zugehörigen formalen Parameter (dividend und divisor) gespeichert. Deswegen ist die Reihenfolge ihrer Angabe auch so wichtig.

Diese formalen Parameter sind nur in dem Kontext vorhanden, in dem sie angegeben wurden. Also nur innerhalb des Funktionskörpers. Wenn dessen Aufgabe abgeschlossen wurde, werden die Speicherplätze wieder freigesetzt.

Mit Argumenten kannst du Werte an einen anderen Kontext weitergeben, als da wären: (Element-)Funktionen oder Konstruktoren. Da du optimalerweise dein Programm nach dem Teile und herrsche-Prinzip in einzelne Unterprogramme (also Funktionen oder Klasse) einteilst, wird es oft nötig sein, Werte weiterzugeben.

2)

Rückgabewerte sind die Werte, die von einer Funktion zurückgegeben werden. Jede Funktion gibt einen Wert zurück. So weiß das Programm unter anderem, dass deren Programmfluss abgeschlossen ist.

Im oberen Beispiel ist 2 der Rückgabewert der aufgerufenen Methode (denn 4 / 2 = 2). Er wurde durch

dividend / divisor;


erst berechnet und via

return


schließlich zurückgegeben. Die return-Anweisung bricht gleichzeitig den Programmfluss der Methode ab, denn das eigentliche Ziel - die Rückgabe eines Wertes, wurde erreicht. 

Von welchem Typ der Wert ist, bestimmt im Übrigen der Rückgabetyp, der in der Funktionssignatur bestimmt wird. Hier ist es der Typ int.
public static int berechneQuotient(int dividend, int divisor)

Standardmäßig ist es der leere Typ void. Dieser wird entweder am Ende der Funktion zurückgegeben oder wenn du nur die return-Anweisung ohne folgenden Rückgabewert verwendest.
public void tuwas(String aufgabe){
  if(aufgabe == null) {
    return; // Vorzeitiger Abbruch der Funktion via return und dabei auch automat. Rückgabe von void
  }
  // ...
  // Ende der Methode > automat. Rückgabe von void
}

Mit einem Rückgabewert kannst du dir bspw. das Ergebnis einer Berechnung holen, welcher von einer deiner Funktionen ermittelt wurde.

Der Rückgabewert muss stets mit dem Typ übereinstimmen, der für die Funktion angegeben wurde. So darf berechneQuotient nur Werte vom Typ int zurückgeben.

cHierbei geht es um Methoden.

Dabei betrachten wir mal den Aufbau eines Methoden-Kopfes:

 (1)    (2)     (3)       (4)              (5)
public double berechneFI(double laenge, double breite)

Hierbei ist:

  1. die Berechtigung
  2. der Rückgabewert
  3. der MethodenName
  4. der erste Parameter
  5. der zweite Parameter

Bei diesem Beispiel geht es um die Berechnung eines Flächeninhaltes.

Zu deinen Fragen des Zwecks:

  • Parameter einer Methode sorgen dafür, dass die Methode diese Parameter als Variable verwenden kann.
  • Der Rückgabewert kann für das Ergebnis oder den Ausgang einer Methode stehen.

Konkret hier:

Deine Eingangsparameter sind Länge und Breite. Die erwartete Rückgabe ist der Flächeninhalt, der sich aus Länge*Breite ergibt

Die Methode vollständig würde so aussehen:

public double berechneFI(double laenge, double breite) {
   return laenge * breite;
}

Solltest du dich nun fragen: "Wozu brauche ich dann eine Methode? Das könnte ich auch direkt hinschreiben!"

Würde ich dies wie folgt begründen:

  • Solltest du an dieser 'Logik' mal etwas ändern wollen, und du berechnest an mehreren Stellen den Flächeninhalt, änderst du dies anschließend Zentral an einer Stelle, nämlich an der Methode.
  • Methoden können deutlich komplexer sein als in diesem Beispiel, um die Übersicht zu wahren, sollte man daher Code auf mehrere Methoden aufteilen, sodass dieser noch wartbar und verständlich bleibt.

Selbst in diesem Beispiel-Code gäbe es Optimierungsbedarf: Beim direkten Rechnen mit Nachkomma-Zahlen wie Double kann es durchaus zu Rundungsdifferenzen kommen. Ist dir dies zu ungenau, kann man für die Berechnung selbst auf andere Klassen wie BigDecimal zurück greifen um einen genaueren Wert zu erhalten.

Hallo Aufrufparameter sind Variablen die einer Funktion übergeben werden. Beispiel: int erg = addTwoNumbers(num1,num2). In der Funktion steht dann int rückgabewert = num1+num2; return rückgabewert; Rückgabewert ist also nichts anderes als eine Variable die von der Funktion zurückgegeben wird.


Bei diesem Beispiel also: num1,num2 = Aufrufparameter, rückgabewert = Rückgabewert.