Java return bedeutung?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Methoden kannst du dir wie Funktionen in der Mathematik vorstellen. Du kannst etwas hineingeben und sie geben dir etwas zurück. Beispiel in der Mathematik:

x = cos(2π)

x hat dann den Wert 1.

Die Funktion ist cos. Sie könnte in Java als Methode so aussehen:

public static double cos(double number) {
   // hier wird der Kosinus berechnet
   // ...
   // wenn man ihn berechnet hat,
   // wird er mit return zurückgegeben
   return dasErgebnis;
}

Wenn du dann den Kosinus von 2π berechnen willst, schreibst du:

double x = cos(2 * Math.PI);

x hat dann den Wert 1. Genauso wie beim Beispiel aus der Mathematik oben.


Ich erkläre nochmal die einzelnen Schlüsselwörter:

public: Die Methode ist von überall aufrufbar. Siehe dazu auch die Tabelle hier: https://stackoverflow.com/questions/215497/in-java-difference-between-default-public-protected-and-private

static: Die Methode kann aufgerufen werden, ohne dass eine Instanz/ein Objekt von der jeweiligen Klasse erzeugt wurde:

Klassenname.cos(wert);

double: Das ist der Datentyp der Rückgabe, also von dem, was mit return zurückgegeben wird. Es gibt auch Methoden, die nur etwas tun, aber nichts zurückgeben. Diese werden mit dem Schlüsselwort void markiert, also dem leeren Datentyp.

cos: Der Name der Methode

double number: In der Klammer werden die einzelnen Parameter der Methode bestimmt. Das sind die Werte, die der Methode übergeben werden. Sie werden per Kommata getrennt. Für jeden Parameter gibt man zunächst seinen Datentyp und anschließend den Namen ein, unter dem er in der Methode angesprochen werden kann.

return: Verlässt die Methode und gibt das Ergebnis der Methode zurück.


Nun zu deiner Methode:

public static double berechneDruck(double v,double t){ 
return R *t/v;
}

Die Methode ist public, static, liefert ein Ergebnis vom Datentyp double zurück und heißt berechneDruck. Als Parameter werden zwei doubles übergeben, die in der Methode als v und t bekannt sind. Die Methode berechnet R * t/v und liefert das Ergebnis zurück. Dieses kann z.B. in einer Variable gespeichert werden.

Würde man die Methode folgendermaßen aufrufen, hätte die Variable x den Wert 36:

double x = berechneDruck(10, 20);

Genau genommen veranlasst der return-Befehl das Programm dazu, wieder aus dem aktuellen Kontext (Code-Block) einer Methode herauszuspringen.

Ein simples Beispiel:

public void printQuotient(double dividend, double divisor){

if(divisor == 0){ return; }
double result = dividend / divisor; System.out.println("Ergebnis: " + result); }

Wenn das 2 übergebene Argument an die Methode den Wert 0 hat, wird diese vorzeitig beendet. Die Berechnung nach dem return-Befehl wird ignoriert, der Programmzeiger springt sofort an das Ende der Methode und dann heraus.

Zusätzlich kann der Befehl einen Wert aus seinen Kontext heraustransportieren. Von welchem Typ dieser Wert ist / sein muss, wird in der Methodendefinition festgelegt. Wenn der Typ void ist, bedeutet es, dass nichts zurückgegeben wird.

Ein Beispiel mit festgelegtem Rückgabewert:

public double getQuotient(double dividend, double divisor){

if(divisor == 0){ return Double.NaN; // NaN = Not a number }
return dividend / divisor; }

Die Methode gibt vor, einen Wert des Typs double zurückzugeben. Sie ist folglich dazu verpflichtet. Jeder Programmzweig, der die Methode zu einem Ende bringt, muss via return einen double-Wert liefern. Dieser wird einfach hinter den return-Befehl geschrieben (oder wie hier, direkt dahinter berechnet).

Schaut man sich nun noch die möglichen Aufrufe beider gezeigter Methoden an:

printQuotient(5, 0); // 1

getQuotient(5, 2); // 2
double quotient = getQuotient(5, 2); // 3

In Fall 1 wird nichts zurückgegeben, es wird auch keine Konsolenausgabe generiert, da der Programmfluss in der Methode in einen Zweig läuft, der vorzeitig abgebrochen wird.

In Fall 2 gibt die Methode einen Wert zurück, doch er findet keine weitere Verwendung.

In Fall 3 wird der zurückgegebene Wert in einer Variable gespeichert, um später wieder verwendet werden zu können.

In deinem Fall wird also eine statische Methode definiert, die den Druck berechnen soll. Damit das berechnete Ergebnis außerhalb der Methode weiter verwendet werden kann, transportiert sie dieses raus aus ihren Kontext.

public static double berechneDruck(double v, double t){ 
return R * t / v;
}

"return" sagt aus, dass der angegebene Wert (in diesem Fall das Ergebnis der Rechnung 18*t/v) an den Methodenaufrufer zurückgegeben wird. Der Typ der Rückgabe wird in der Methodensignatur (public static double berechneDruck(...)) festgelegt

In diesem Fall wird ein Double zurückgegeben mit dem Wert 18 * t / v. Beispiel:

double variable = berechneDruck(1,1);

variable hätte nun den Wert 18

Die Rückgabe kannst du entweder sspeichern oder direkt verwenden, um damit weiterzuarbeiten (z.B. folgendermaßen:)

double variable2 = 15 * (berechneDruck(1,1) + 2); 

regex9  02.09.2017, 17:19

Bitte mit den Begrifflichkeiten aufpassen. Der Rückgabetyp gehört nicht zu der Methodensignatur!

Der Compiler unterscheidet nicht zwischen Methoden gleichen Rückgabetyps. So würde folgendes Beispiel zu einem Compiler-Fehler führen:

public class A {
    public char doSomething(int arg) {}

public bool doSomething(int arg) {} }

error: method doSomething(int) is already defined in class A

Nur Methodenname und Parameterliste sind Teil der Signatur.

0

Es gibt einen Wert zurück...
heißt: Wenn du 

variable = funktionsaufruf();

machst, hat variable den wert der mit return zurückgegeben wird.