[JAVA] Was bedeutet static und void?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Methoden können Werte zurück liefern oder eben nicht:

Mit Wert:

private int getAnzahlKinder() {
   return 3;
}

Ohne Wert:

private void macheKinder() {
   // NSFW
}

Wenn eine Methode nur etwas 'machen' soll, bei dem kein Rückgabewert erforderlich ist, verwendet man void. Möchte man einen Rückgabewert haben, so sollte man hier stattdessen den gewünschten Rückgabewert definieren. Hierbei wird aber ein "return Wert" in der Methode erwartet, welche die Methode 'beendet'.

Bei statisch und nicht statisch:

Statische Variablen und Methoden erfordern zum einen keine Instanz der Jeweiligen Klasse und sind somit auch nicht an eine Instanz gebunden. 

Beispiele:

Konstanten, wie Monate in Calendar: 

public final static int JANUARY = 0;

Der Variable January ist 'fix' der Wert 0 zugewiesen.  Über:

System.out.println(Calendar.JANUARY);

Erhälst du somit immer den Wert 0. - Vor der Konstante ist der Klassenname anzugeben und keine Instanz dessen.

Ohne static ist eine Instanz eine Voraussetzung und die Variable ist nur innerhalb einer Instanz gültig:

class Auto {

private String marke;

public Auto(String marke) {
   this.marke = marke;
}

Hier wäre die Variable Marke nicht statisch, wodurch eine Instanz vorausgesetzt wird.

Auto auto1 = new Auto("VW");
Auto auto2 = new Auto("BMW");

Für die Instanz auto1 ist die Variable "marke" nun "VW" und für "auto2" "BMW"

Beim Zugriff auf nicht statische Variablen ist auch die Instanz voran zu stellen und nicht die Klasse.


regex9  20.08.2016, 14:41

Ergänzung zu statischen Inhalten:

Dadurch, dass statischer Inhalt an die Klasse gebunden ist, ergibt sich auch ein Unterschied im Ladeverhalten. Statische Inhalte werden mit den Klassen zu Programmstart geladen. Instanzen dagegen werden erst zur Laufzeit erzeugt. Daher kann eine statische Methode nicht auf dynamische Inhalte zugreifen.

Bsp.:

class Fahrzeug {
  private int anzahlReifen;

public static void SetReifenanzahl(int anzahl){ this.anzahlReifen = anzahl; /* geht nicht, denn zum Programmstart gibt es noch keine Instanz von Fahrzeug und der Compiler kann das Schlüsselwort this nicht auflösen */ }
}
2

static: du kannst es ohne eine instanz abrufen


void: es wird nichts returnt


also "public static void main(String[] args){...}" 

->Da wird nichts return, z.B. da es die Mainmethode ist, die muss ja nichts returnen, da sie ja quasi die "oberste Methode ist", die alles ausführt



"private static int Methode(){...

return null;}"

 

->du brauchst kein objekt um das aufzurufen du rufst es einfach mit "Methode();" auf. 


LG und ich hoffe ich hab dir geholfen! 


regex9  20.08.2016, 14:48

>Da wird nichts return, z.B. da es die Mainmethode ist, die muss ja nichts returnen, da sie ja quasi die "oberste Methode ist", die alles ausführt

Nun, in C beispielsweise ist es möglich einen Wert zurückzugeben, der angibt, ob das Programm ordnungsgemäß beendet wurde oder nicht.

0
gut4fr5g4  20.08.2016, 20:40
@regex9

doch das ist eine begründung, warum ich sagte, dass die main methode nichts returnt...

Aussage: Die main methode returnt nichts 

begründung: denn/weil ich bin von java ausgegangen 

0
androhecker  20.08.2016, 09:54

Das letzte Beispiel geht nicht, du kannst nicht null zurückgeben, wenn int gefordert ist, null fällt unter Object.

5
gut4fr5g4  20.08.2016, 09:55
@androhecker

stimmt ja, es müsste "return 0;" sein, danke für die Verbesserung! :D

0