2016-04-18 6 views
-3

Ich habe sehr dumme Zweifel, warum wir Return-Anweisung in der Methode verwenden. Ohne Verwendung return-Anweisung in der Methode können wir auch Wert als Beispiel erforderlich bekommenWarum gibt es eine Rückkehr Aussage

package testing; 

public class ReturnMethod { 
    static int a = 10; 
    static int b = 5; 
    static int c; 
    static int d; 

    public static void add() { 
     c = a + b; 

    } 

    public static int returnAddValue() { 
     d = a + b; 
     return d; 
    } 

    public static void main(String[] args) { 
     add(); 
     System.out.println("c: " + c); 
     int value = returnAddValue(); 
     System.out.println("value: " + value); 

    } 

} 

Im obigen Beispiel in den beiden Fällen ich bin immer Ausgang

c: 15 
value: 15 

So habe ich bin Zweifel, wenn return-Anweisung zu verwenden, und warum ist erforderlich

Antwort

0

Sie sollten eine return-Anweisung verwenden, wenn Sie die Methode zum Zurückgeben eines Werts benötigen.

In Ihrem Fall funktionieren beide Methoden.
Aber Sie können und sollten zurückkehrende Methoden verwenden, wenn Sie nicht möchten, dass ein Feld Ihrer Klasse von einer anderen Klasse geändert wird.

Zum Beispiel wollen Sie money werden nur gesehen, und nicht geändert, wenn Sie ein Bankkonto machen zugehörige Software. Also, machen Sie money privat, und machen Sie eine Methode, die das Geld zurückgibt. Auf diese Weise können andere Klassen nur Geld sehen, aber nicht ändern es.

2

Mit return statement ist die return value nicht erforderlich, in jeder globalen, externen oder Elementvariable gespeichert werden.

Aber ohne return statement müssen Sie Art outer variablen Wert vorbereiten, um das zu verfolgen.

0

Erstens sind Ihre Funktionen unterschiedlich, wie Sie

public static **void** add() 

public static **int** returnAddValue() 

erste zurück, nichts sehen, weil es als Rückgabetyp ungültig ist und der zweite int als Rückgabetyp hat. Zuerst funktioniert, weil c eine globale Variable ist.

+0

aber keine Antwort auf die Frage – Blip

0

Normalerweise würden Sie return verwenden, wenn Sie das Ergebnis nicht in einer (statischen) Variablen Ihrer Klasse speichern.

public class ReturnMethod { 
    static int a = 10; 
    static int b = 5; 

    public static void add() { 
     int c = a + b; 
    } 

    public static int returnAddValue() { 
     int d = a + b; 
     return d; 
    } 

    public static void main(String[] args) { 
     add(); 
     //not possible to access c here 
     //System.out.println("c: " + c); 
     int value = returnAddValue(); 
     System.out.println("value: " + value); 
    } 
} 

In diesem modifizierten Beispiel hätten Sie keinen Zugriff auf das Ergebnis der add() - Methode.

Sie sollten wahrscheinlich über Scopes in Java lesen.

+0

, aber ich bin mit dem Ausgang, c bekommen: 15, Wert: 15, die jeweils gleichen – DoubtClear

+0

Ja, aber nur, weil Sie das Ergebnis in einer statischen Variablen speichern der Klasse. Wenn Sie näher auf mein Beispiel schauen, habe ich die Variablendefinitionen von c und d aus der Klasse entfernt, so dass Sie in der Hauptmethode nicht auf c (das gewünschte Ergebnis) zugreifen können, deshalb habe ich es auskommentiert. – Alex

+0

ja Alex du bist richtig – DoubtClear

0

Sie haben eine Klassenvariable c & d. Diese Variablen sind der Klasse zugeordnet und im Heap gespeichert. Wenn Sie ihm einen Wert zuweisen, können Sie ohne explizite Rückgabeanweisung darauf zugreifen. Wenn Sie jedoch d innerhalb der Methode deklariert haben, ist eine Rückgabeanweisung erforderlich, um dem Aufrufer den Wert zurückzugeben.

1

Wenn Sie das Ergebnis einer Methode einer statischen Variablen zuweisen (und in der Tat die "Parameter" der Methode übergeben, indem Sie statische Variablen setzen), haben Sie Probleme, wenn diese Methode gleichzeitig von zwei Threads aufgerufen wird die Variablen für alle Anrufungen des Verfahrens geteilt:

Thread t1 = new Thread(() -> {a = 1; b = 2; add(); }); t1.start(); 
Thread t2 = new Thread(() -> {a = 3; b = 4; add(); }); t2.start(); 
t1.join(); t2.join(); 

Sie wissen nicht, welche dieser Threads laufen erste, oder auch wenn sie zur gleichen Zeit ausgeführt werden; also wissen Sie nicht, was der Wert von a oder b ist, wenn Sie add() aufrufen, und noch wissen Sie, ob der Wert in c danach das Ergebnis des Aufrufs im ersten oder zweiten Thread (oder eine Mischung aus den beiden) ist .

Der in c gespeicherte Wert danach könnte jede der 3, 5 oder 7 (oder einen anderen Wert, wenn es ein anderer Thread die auchadd() außerhalb dieser Code gleichzeitig Aufruf ist.

Dieses Problem der Faden Störungen gerade vollständig weggeht, wenn Sie Werte halten, um den Stapel lokalisiert, durch a und b als Methodenparameter geben~~POS=HEADCOMP, und zum Empfangen des Ergebnisses als Rückgabewert.


Selbst wenn Ihr Code single-threaded ist, dann ist es einfach hässlich zu schreiben zu haben:

a = 1; 
b = 2; 
add(); 
int result = c; 

statt

int result = add(1, 2); 
+0

+1, weil dies die einzige Antwort ist, die die Gefahren erklärt, die mit Code behaftet sind, der statische Variablen verwendet, um seine Ergebnisse zu speichern. – Madhusudhan

0

Der Grund, dass Sie den Wert der Klassenvariablen c zugreifen können ist dass es als statisch initialisiert wurde. Wäre dies nicht der Fall, würde die Information in der c-Variablen verloren gehen, sobald die add-Methode endet. Der Grund dafür, dass Methoden einen Rückgabewert haben, besteht darin, dass der Benutzer den aktualisierten Wert erhalten kann, wenn Manipulationen in den Objektdaten vorliegen. In diesem Fall gibt es eine sehr kleine, was, wenn es eine Reihe von Manipulationen mit den Daten gibt. In diesem Fall muss der endgültige Wert an das aufrufende Objekt zurückgegeben werden, was ohne Rückgabeanweisung nicht möglich ist.

0

Auf die Variable C in Ihrem Code-Snippet wird durchgängig in der Klasse zugegriffen und bleibt so lange bestehen, bis das Objekt der Klasse existiert. Sie können also den Wert von Variable C außerhalb der Methode ausgeben. Wenn Sie jedoch in der Methode add() eine lokale Variable deklariert haben, wird die Druckanweisung System.out.println("c: " + c); den Standardwert für die Variable c ausgeben. Das ist in diesem Fall Null.

0

Es hängt vollständig von unserer Anforderung ab, ob ein Wert von unserer Methode zurückgegeben oder die Instanzvariable aktualisiert wird. Irgendwann möchten wir nur einen Wert verarbeiten und das Ergebnis zurückholen. Das Ergebnis wird auf andere Weise verwendet. In diesem Fall müssen wir den Wert aus der Methode zurückgeben.

Zum Beispiel

java.lang.Math.sqrt (Doppel a) Methode einen Wert zurückgeben und wir verwenden zurückgegebene Wert gemäß unserer Bedarf oder Anforderung. Können Sie denken, wenn diese Methode keinen Wert zurückgibt, was dann aktualisiert werden sollte, halte ich diese Methode für nutzlos, wenn sie keinen Wert zurückgibt.

Verwandte Themen