public static void Rückgabe

Abend, ganz kurze Frage, nachdem ich nach einiger Sucherei diese Frage nicht selbst beantworten konnte:

Es heißt ja immer, dass public static void nichts zurückgibt, was ja auch in gewisser Weise stimmen mag.

Doch wie ist das genau gemeint?

Habe ein bisschen rumprobiert, und gemerkt, dass irgendwie nur Arrayverändernungen von void-Methoden übertragen werden. Aber warum ist das so?

So wird zB. in folgendem Quellcode int[] a durch die void-Methode verändert, aber warum nicht auch int i? Es wurde doch als int x übernommen, und x wurde dann der Wert 123 zugewiesen.
Java:
class random
{
  public static void main(String[] args)
  {
    int a[] = new int[10];
    füllen(a);
    ausgeben(a);
    System.out.println();
    int i=0;
    bubblesort(a,i);
    ausgeben(a);
    System.out.println();
    System.out.println(i);    
  }
  
  public static void bubblesort(int b[],int x)
  {
    boolean sortiert = false;
    
    while (sortiert==false) 
    { 
      sortiert=true;
      for (int i=0;i<b.length-1;i++) 
      {
        if (b[i]>b[i+1]) 
        {
          int tmp = b[i];
          b[i] = b[i+1];
          b[i+1] = tmp;
          sortiert=false; 
        } // end of if
      } // end of for
    } // end of while
    
    x = 123;
  }
  
  
  
  public static void füllen(int b[])
  {
    for (int i=0;i<b.length;i++) 
    {
      b[i]=(int)(Math.random()*100+1); 
    } // end of for
  }
  
  public static void ausgeben(int b[])
  {
    for (int i=0;i<b.length-1;i++) 
    {
      System.out.print(b[i]+","); 
    } // end of for
    System.out.print(b[b.length-1]);
  }
}

Wäre sehr, sehr dankbar, wenn mir das jemand ganz kurz erklären könnte :) Dann könnte ich das auf ein etwas kompliziertes Problem übertragen, womit ich aber dann wahrscheinlich selber fertig werde, wenn ich das nachvollziehen kann :)
 

rme

Top Contributor
Du musst bei Methoden unterscheiden zwischen:

* Parametern: Diese werden einer Methode übergeben und sie kann sie nicht ändern, da in Java alles by-value übergeben wird (bedeutet, dass nur eine Kopie des *Werts* eines Objekts übergeben wird, nicht das Objekt selbst). Also, wenn du einer Methode den Wert "23" vom Typ int übergibst, dann kann die Methode diesen Wert zwar ändern:

Java:
public void f(int x) {
  x = 23;
}

Aber außerhalb des Aufrufs ist diese Änderung nicht sichtbar, d.h. in diesem Beispiel:

Java:
int x = 42;
f(x);

hat x hinterher immernoch den Wert 42, da nur eine Kopie des Werts übergeben wurde, die Änderung hat also keine Auswirkung. Interessant wird es nun, wenn wir nicht primitive Datentypen wie int betrachten, sondern Objekte: Was ist denn der Wert eines Objekts? Und dessen Kopie? Nun, das ist in Java eine Referenz auf den Speicherbereich des Objekts. Bedeutet: Wenn du einer Methode ein Objekt übergibst, bekommt sie eine Referenz auf den Speicher übergeben - das Objekt wird nicht kopiert, sondern nur die Information, wo sich das Objekt im Speicher befindet. Deshalb kann die Methode in einem Beispiel den Inhalt des Objekts ändern, denn b ändert nicht die Referenz von b, sondern den internen Zustand von b. Dieser ist auch nach außen sichtbar. Es wäre aber nicht möglich, mit "b = ..." die Referenz ansich zu ändern, b würde außerhalb immernoch auf das alte Array zeigen.

* Rückgabewerten: Sollte jetzt hoffentlich klarer sein - void bedeutet nur, dass die Methode keinen Wert über den Rückgabewert zurückgibt. Sie kann aber trotzdem Informationen nach außen tragen, indem sie den internen Zustand der Parameter ändert, sofern dies Objekte sind - sie kann aber auch den Zustand des eigenen Objekts ändern, indem an irgendwelchen Instanzvariablen etwas geändert wird.

Ich hoffe, es ist dir jetzt ein bisschen klarer? :)
 
Zuletzt bearbeitet:
Oh, ja, das hört sich sehr schlüssig an, vielen Dank !

Das heißt also, so wie ich das verstanden habe, wenn Objekte wie int[] an eine Methode übergeben wird, von dieser keine Kopie erstellt werden, die dann verändert werden, sondern der Speicherbereich von denen übergeben wird, und dieser wird dann verändert ... und das hat dann zur Folge, dass auch außerhalb der Methode die Veränderung sichtbar ist, da das Objekt weiterhin auf denselben Speicher zugreift. :) (also sollte so in eigene Worte sein, damit ichs mir besser merken kann :D)

Finde ich aber irgendwie mies von meinem Lehrer, ich soll eine GFS über Sortieralgorithmen haben, aber hab noch nie was von den verschiedenen Methodentypen wie public static int etc. gehört, musste mir das ganze Wissen selber zusammenkratzen (was ja irgendwie auch gar nicht so schlecht ist) Naja, aber das war eigentlich meine letzte Frage zu den Methoden, sonst weiß ich eigentlich alles, was ich wissen muss :D

(das komplizierte war eine Rekursion, die die liste[] verändert hat, aber sonst nichts... aber jetz weiß ich ja, warum das so ist :D )


edit: eine kurze Frage hätte ich dann doch noch:

warum kann ich bei QuickSort lediglich

Java:
[...] quicksort(a);
[...]

schreiben, um das a[] zu sortieren, während ich bei MergeSort

Java:
a = mergesort(a)
schreiben muss, da er sonst nichts macht?
 
Zuletzt bearbeitet:

rme

Top Contributor
Ja, deine Zusammenfassung ist genau richtig :)

Um Sortieralgorithmen zu verstehen, benötigt man eigentlich keine konkrete Programmiersprache. Man kann das auch alles in Pseudo-Code (einer fiktiven Programmiersprache, die man sich für diesen Zweck ausdenkt) erklären, anhand von Bildern erklären oder so.

Hier eine Inspiration - Eine Tanzgruppe erklärt Quicksort durch einen ungarischen Volkstanz: Quick-sort with Hungarian (Küküll?menti legényes) folk dance - YouTube

Da sind noch weitere Sortieralgorithmen durch Tänze erklärt :)
 
Ja, aber soll meinem Kurs halt schon auch erklären, wie man denn dann auch anwenden kann in Java, also seine Implementierung und so. :b
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
C public static void main(String[] args) Java Basics - Anfänger-Themen 6
D Frage zu public static void main. Java Basics - Anfänger-Themen 4
G Vor oder hinter public static void main. ? Java Basics - Anfänger-Themen 8
G Was ist public static void main(String[] args)? Java Basics - Anfänger-Themen 12
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
A die public static void main ? Java Basics - Anfänger-Themen 3
N public static void main(String args[]) Java Basics - Anfänger-Themen 6
P Was genau bedeutet "public static void main(String[] ar Java Basics - Anfänger-Themen 10
J public static void main? Java Basics - Anfänger-Themen 5
G public static void main(final String[] args) Java Basics - Anfänger-Themen 4
N public static void Java Basics - Anfänger-Themen 18
X Was genau heißt "public static void main(String[] args) Java Basics - Anfänger-Themen 4
B public static void main (String[] args) ??? Java Basics - Anfänger-Themen 2
G getParameter in public static void main Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
S public static boolean Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
S Frage zu public static Java Basics - Anfänger-Themen 29
Hamstinator public static. Gute Idee? Java Basics - Anfänger-Themen 6
-horn- public static double[][][] NAME() nur per RETURN Wertrückgabe möglich? Java Basics - Anfänger-Themen 20
O Unterschied zwischen static und public Java Basics - Anfänger-Themen 2
V public nachträglich in public static umwandeln /JFormDesigne Java Basics - Anfänger-Themen 5
C Kann mir jemand sagen warum public void unzulässig ist? Java Basics - Anfänger-Themen 2
Say public/default Interface Java Basics - Anfänger-Themen 9
Denix The public type Main must be defined in its own fileJava(16777541) Java Basics - Anfänger-Themen 13
melaniemueller Datenkapselung Sichtbarkeit public Java Basics - Anfänger-Themen 4
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
G Klassen Mit fremder Klasse auf public Methode zugreifen Java Basics - Anfänger-Themen 23
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
J Klasse wird als private erkannt obwohl sie public deklariert ist Java Basics - Anfänger-Themen 3
L RSA Public Key einlesen Java Basics - Anfänger-Themen 0
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
K modifier public Java Basics - Anfänger-Themen 3
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
D Klassenvariablen standardmäßig private oder public? Java Basics - Anfänger-Themen 2
T Java Code Hilfe - public void xxx() Java Basics - Anfänger-Themen 2
T public void - Problem Java Basics - Anfänger-Themen 10
B public/private nur 1x schreiben Java Basics - Anfänger-Themen 3
N Java UML: Eine Frage zu public-Variablen Java Basics - Anfänger-Themen 19
T public-private problem Java Basics - Anfänger-Themen 5
J public enum? in Java Java Basics - Anfänger-Themen 9
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
B main methode ohne public Java Basics - Anfänger-Themen 5
W Frage public protected konstruktor Java Basics - Anfänger-Themen 6
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
J "public int x" - Zugriff von anderer Klasse (selbes Package) nicht möglich?! Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
K Kapselung public / private verständis problem Java Basics - Anfänger-Themen 17
S Warum sind Attribute der Klasse java.awt.Point public? Java Basics - Anfänger-Themen 3
K OOP Attribute von Klasse in die public class übertragen? Java Basics - Anfänger-Themen 7
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
F public variable erstellen, & darauf zugreifen Java Basics - Anfänger-Themen 12
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
X enum Fehlermeldung "The public type Day must be defined in its own file" Java Basics - Anfänger-Themen 8
B Public boolean einfügen Java Basics - Anfänger-Themen 12
N public class -> public method -> variable private? Java Basics - Anfänger-Themen 10
R jLabel lässt sich nicht public setzen?? Java Basics - Anfänger-Themen 15
S Public-Klassen und Dateien Java Basics - Anfänger-Themen 5
StickToFreak Fehler mit public class Java Basics - Anfänger-Themen 13
K konstruktur als public definieren Java Basics - Anfänger-Themen 11
StickToFreak public class problem ôÔ Java Basics - Anfänger-Themen 3
G field public/private wann Java Basics - Anfänger-Themen 11
H eine als public deklariete Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
T Konstruktor mit oder ohne public-Bezeichner? Java Basics - Anfänger-Themen 4
T Geht so was? public void verkaufe (<X implements Produkt& Java Basics - Anfänger-Themen 8
P immer "public class". ? Java Basics - Anfänger-Themen 4
J Public / Private Keys speichern bzw. lesen? Java Basics - Anfänger-Themen 8
A kein zugriff auf variable trotz public? Java Basics - Anfänger-Themen 3
J public class Java Basics - Anfänger-Themen 15
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
G (Anfängerproblem) Problem mit dem Aufruf von public-Methoden Java Basics - Anfänger-Themen 3
D Zugriff auf attribut anderer Klasse privat/public? Java Basics - Anfänger-Themen 9
B Warum manchmal public class und manchmal nur class Java Basics - Anfänger-Themen 3
A Javadoc nur bei public Klassen? Java Basics - Anfänger-Themen 3
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
P public enum ";"expected Java Basics - Anfänger-Themen 7
B public und protected Java Basics - Anfänger-Themen 11
G <identifier> expected bei public void final Java Basics - Anfänger-Themen 3
G GUI Controls private oder public Java Basics - Anfänger-Themen 6
G Variablen public oder private? Java Basics - Anfänger-Themen 9
R public Klassen Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben