Methoden Schlüsselwörter der Methode

babuschka

Top Contributor
Hallo,

ich nage mich grad durch das Buch "Java 7 for Dummies", weil ich noch kompletter Anfänger in Java bin und diese Bücher zum Lernen ziemlich hilfreich finde.
Alles wird auch da allerdings nicht erklärt und i.d.R. findet sich etwas in dieser Teilmenge, was einem unklar ist. So auch hier.
Vieleicht kann mir jemand weiterhelfen: Wenn ich eine Methode deklariere, kommen da ein paar Schlüsselwörter (z.B. "public", wenn die Methode überall eingesetzt werden soll), dann der Name der Methode und dann in () die Parameter.
In einem der im Buch abgedruckten Listings (8.2, falls wer das Buch hat) ist eine Zeile
Java:
static void bezahleMitarbeiter (Scanner aScanner
Hier wird also eine Methode bezahleMitarbeiter definiert, die sich auf eine Variable in der (vermutlich im API definierten) Scanner-Klasse bezieht, die da heißt aScanner. Diese Methode ist "static", das weiß ich noch gar nicht, was das heißt, und sie ist "void" - das ist das Teilchen, das mich verwirrt: "void" heißt doch, so wie ich es verstehe, daß die Methode nichts an den Code zurückgibt, sondern nur was ausdruckt oder so. Die komplette Methode geht aber so:
Java:
static void bezahleMitarbeiter (Scanner aScanner) {

einMa.setName(aScanner.nextLine());
einMa.setFunktion(aScanner.nextLine());
einMa.zahleGehalt(aScanner.nextDouble());
aScanner.nextLine();
}
Diese Methode verwendet also verschiedene set-Methoden und eine vorher definierte zahleGehalt-Methode. Aber damit gibt Sie doch etwas an den Code zurück, indem Sie mittels der set-Methoden Eigenschaften dieses Objekts zuweist, oder wie ist das?
Kann auch hier jemand meinen Denkknoten auflösen?
Danke schon mal!
Gruß,

Javaswillerdenn
 
void heisst einfach - keine Rueckgabe. Es sagt nix aus was die Methode an sich macht und welche Seiteneffekte sie hat.

Java:
public String foo() {
   // mach was auch immer
   return "foo";
auch hier weiss man nur dass die Methode einen String zurueckgibt, was sie sonst noch macht ist anhand der Rueckgabe nicht zu erschliessen.

static heisst dass die Methode nicht an ein Objekt gebunden ist, d.h. du kannst sie ohne vorher ein Objekt zu instanzieren direkt ueber die Klasse aufrufen
 
Eine
Code:
void-Methode
hat zwar keinen Rückgabewert, kann aber jeden "erreichbaren" Wert (Sichtbarkeit!) verändern.

Du kannst also nicht schreiben:
Code:
myValue=myVoidMethode(myBlaBla)
;

In Pascal / Delphi (und Basic, ...) heißt der Unterschied: Funktionen<->Prozeduren.
 
Zuletzt bearbeitet:
Hi AquaBall,

da magst Du sehr recht haben. Eine solche Unklarheit selbst zu lösen, indem man's einfach ausprobiert, hat Vorteile, es erhöht den lerneffekt.
So weit bin ich aber noch nicht, ich hab am Do die Zusage einer neuen Stelle bekommen und seit Do weiß ich, daß ich Java lernen muss/ will. Werd scho wern, sagt Frau Kern...
Gruß,

Javaswillerdenn
 
Hallo AquaBall,

okay. Ich verstehe es zwar immer noch nicht ganz, weil nach meinem Verständnis diese Methode, indem sie mehrere set-Methoden verwendet, ja etwas an den Code zurückgibt - die so gesetzten werte werden ja dann von der bezahleMitarbeiter-Methode verwendet - aber ich denke, das wird schon.
Gruß,

Javaswillerdenn
 
Ich verstehe es zwar immer noch nicht ganz, weil nach meinem Verständnis diese Methode, indem sie mehrere set-Methoden verwendet, ja etwas an den Code zurückgibt

Nein! Definitiv NICHT.
Die void-Methode gibt nichts zurück!
Sie (kann) zwar beliebige Werte manipulieren, hat aber keinen Ergebniswert.

Dieser müsste / und kann nur ausschließlich mir
Code:
return (...)
zurückgegeben werden,
und das geht nur bei Methoden, die NICHT void sind.

Java:
int myIntMethode() { return anyInt;};
void myVoidMethode() { return;};  // (Return auf jeden Fall ohne Wert, aber meist gar nicht nötig)
x=123* myIntMethode() + 456;  // kann direkt verwendet werden
x=123* myVoidMethode() + 456;  // Geht nicht!

Fehler sind folgende Sachen:
Java:
int myIntMethodeBad() { x=123;};  // Return fehlt!!
void myVoidMethodeBad() { return anyInt;}; // ReturnWert unzulässig
x=123* myVoidMethodeBad() + 456;  // Geht nicht!
 
okay. Ich verstehe es zwar immer noch nicht ganz, weil nach meinem Verständnis diese Methode, indem sie mehrere set-Methoden verwendet, ja etwas an den Code zurückgibt -
Die Methode setzt halt irgendwelche Werte. Von "zurück geben" kann man da nicht sprechen.

Beim Rückgabewert geht es wirklich nur darum, ob die Methode selbst einen Wert mit return an den Aufrufer zurückgibt, den der Aufrufer der Methode verwenden kann.
 
Dieser müsste / und kann nur ausschließlich mir
Code:
return (...)
zurückgegeben werden,
und das geht nur bei Methoden, die NICHT void sind.
Das hilft mir (momentan) leider relativ wenig - ich muss den Code ja letztendlich selbst schreiben und das Wissen, daß ein Rückgabewert immer mit "return" funktioniert und nur da, wo nicht "void" steht, setzt ja voraus, daß ich schon geschriebenen Code vor mir habe ;-) Insofern kann ich das hier am konkreten Bsp. rückschließen, aber das fördert noch nicht das Verständnis.

@nillehammer
Die Antwort bringt mich schon etwas weiter - der Aufrufer steckt hier in einer Klasse "Gehaltsabrechnung", aber die Werte, die die bezahleMitarbeiter-Methode setzt, gehen in eine weitere Methode ein, die in einer Klasse "Mitarbeiter" definiert wird - der Aufrufer kriegt den Code also nicht. Ist die Argumentation soweit richtig?
Etwas kompliziert wird das ganze dadurch, daß eine Zeile der bezahleMitarbeiter-Methode augenscheinlich umgekehrterweise die zahleGehalt-Methode aufruft. Aber um danach zu fragen, müsste ich beide Listings komplett hier posten. Da probier ich schneller, mal den Autor des Buches zu erwischen. Das find ich an den ForDummies-Büchern so cool, man kriegt eine direkte email-Adresse und tw. ist auf der WebSite sogar ein Chat mit dem Autor möglich.

Danke auf jeden Fall und an alle!
Gruß,

Javaswillerdenn
 

Neue Themen


Zurück
Oben