# Was genau macht "public static void" ?



## Lestas89 (13. Sep 2015)

Ich bringe mir derzeit Java selbst bei und habe eine Frage zu folgendem Programm:

```
class PotenzRekursiv {

   static double qHochpRek(int q, int p){
     if(p >= 0){
       if( p == 0)
         return 1;
       else
         return q*qHochpRek(q,p-1);
     }
     else{
       if( p == 0)
         return 1;
       else
         return 1./(q*qHochpRek(q,-p-1));
      
     }
    
   }
   public static void main(String[] args) {
     int q = 2;
     int p = -3;
    
     System.out.println(qHochpRek(q,p));
   }

}
```
Ich verstehe hier rein garnichts mehr. In der Regel schreibe ich im Programm oben immer public static void main (String[] args). Nun steht oben static double und unten public static void main (String[] args). Was macht dieses static double genau?


----------



## Sogomn (13. Sep 2015)

public - Sichtbarkeit (Öffentlich)
static - Statisch (an die Klasse, nicht das Objekt gebunden)
void/double - Rückgabewert (void = nichts wird zurückgegeben)


----------



## Lestas89 (13. Sep 2015)

Gibt es dazu im Internet ein Tutorial?


----------



## MWin123 (13. Sep 2015)

Ja.
Dürfte in jedem Java Anfänger Tutorial stehen.


----------



## Lestas89 (13. Sep 2015)

Kann mir denn jemand erklären was dieses static double hier bewirkt? Ich verstehe wirklich nur Bahnhof.


----------



## JStein52 (13. Sep 2015)

static besagt hier dass du keine Objektinstanz brauchst um diese Methode aufzurufen ! Sie ist an die Klasse gebunden (siehe oben). und double besagt dass die Methode ein Ergebnis vom Typ double zurückliefert.

Lies auch hier mal ein bisschen zu grundlegenden Dingen:

http://openbook.rheinwerk-verlag.de...tml#dodtp44e7828f-b21f-41d3-9c25-d36ace6e35b4


----------



## Maggot (13. Sep 2015)

Ich glaube der Threadersteller möchte wissen warum.die Methode "static double..." VOR der Main steht.

@TE: in Java ist die Reihenfolge von Methoden egal. Deshalb muss die Main aich nicht als 1. stehen.


----------



## thet1983 (14. Sep 2015)

http://www.javavideokurs.de/


----------



## TeeOderJava (16. Sep 2015)

Die Main Methode wird vom Compiler beim Programm start aufgerufen.
*public* steht für die Sichtbarkeit dieser Methode das heißt das die Methode von überall aufgerufen werden kann.
*static* heißt das diese Methode auch ohne die Erzeugung des Objektes ereichbar ist.
*void* steht dafür das diese Methode keinen Rückgabewert hat denn normalerweise gehört jede Methode einem Datentyp an (z.B. int, float oder String) wenn man diesen Rückgabe wert nicht braucht und nur Code ausführen möchte dann nimmt man void. 
*(String[] args)* ist ein String Array. Wenn man ein Programm auf der Konsole ausführt dann kann man dahinter optional Parameter setzen diese landen dann in dem String Array.


----------



## Major_Sauce (16. Sep 2015)

Ich glaube du hast auch nicht verstanden, dass die main-Methode auch einfach über dem double stehen kann.
Das heißt du könntest die komplette Main-Methode (public static void main(){...}) auch einfach nach oben verschieben.

Dies funktioniert, weil das double, das oben steht, genauso wie die Main-Methode gekapselt sind und einfach in der Klasse liegen.
Du kannst das dir wie ne große Kiste vorstellen, in der nochmal Kleine Boxen liegen.
Die "Kiste" ist die Class, die Boxen (Methoden) die da drin Liegen haben miteinander erstmal gar nix zu tun und da kann auch eine Links liegen, die andere rechts oder die Liegen aufeinander, die Positionierung ist erstmal egal, zumindest solange du die nicht ineinander legst.

Und in den Boxen (Methoden) ist dann eben immer der Code, der was ausführen soll, der "Inhalt".

mfg Major


----------



## Neumi5694 (22. Okt 2018)

Was "static double qHochpRek(int, int)" macht, sollte eigentlich als Javadoc im Quelltext stehen , der Name ist nämlich recht schlecht gewählt.

"public static void main(String... args)" ist ein möglicher Einstieg ins Programm. Diese Methode wird vorausgesetzt, damit es überhaupt ausführbar wird.
Was die Modifier machen, wurde oben schon beschrieben, der Name und die Parameter entsprechen einem Standard, damit die Methode vom der VM auch ganz sicher gefunden wird, ohne dass die VM irgend etwas anderes über dein Programm weiß.

Und ja, Tutorials zu Jave gib's in Massen. Suche mal nach "Hello World Java" (Hello World ist traditionell das erste Programm, das in jeder Sprache gelehrt wird)


----------



## mihe7 (22. Okt 2018)

Neumi5694 hat gesagt.:


> Was "static double qHochpRek(int, int)" macht, sollte eigentlich als Javadoc im Quelltext stehen , der Name ist nämlich recht schlecht gewählt.


Ich hoffe mal, dass er in den vergangenen drei Jahren trotz fehlender Doku herausgefunden hat, was qHochpRek macht...


----------



## Xyz1 (22. Okt 2018)

Leichenausbuddelnde ihr! 
Schämt euch was! 

qHochpRek berechnet rekursiv die Potenz von zwei Zahlen!.... Dabei ist ganz bestimmt der erste Wert die Basis und zweiter der Exponent....

Schon Sokrates konnte es!


----------

