[JAVA] Was bedeutet static und void?

3 Antworten

Vom Fragesteller 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.

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 */ }
}
1

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! 

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

5
@androhecker

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

0

>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
@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

Void ist wie zb in php oder js ne function nur eben das bei voids nichts zurückgegeben wird via return.

Hallo zusammen! Brauche Hilfe in Java, bei einem Programm über Lottozahlen (Zufallszahlen). Danke im Voraus schon mal! ?

Mein Programm zieht 10-mal 6 Zufallszahlen. Das erste Problem ist, dass die Zahlen doppelt vorkommen können, und es auch tun. Mein zweites Problem ist, dass ich den Auftrag habe, angeben zu können welche Zahl wie oft gezogen wurde. Dies bezieht sich darauf, dass wir eine Statistik erstellen sollen, welche Zahl wie oft vorkommt, wenn man 1000-mal die 10 Zahlen ziehen lässt. Hier nun mein Programm : /** * * Beschreibung * * @version 1.0 vom 21.08.2015 * @author / public class ConLotto { // Anfang Attribute private static int [] ziehung = new int [6]; // Ende Attribute // Anfang Methoden public static void main(String[] args) { for (int i=0;i<10 ;i++ ) { bildeZiehungszahlen(); zeigeZiehungszahlen(); } // end of for } // end of main public static void bildeZiehungszahlen () { for (int i = 0 ; i < 6 ; i++) { ziehung [i] = 1+(int)(49Math.random()); } // end of for } public static void zeigeZiehungszahlen () { System.out.print (" Ziehung ergab:"); for (int i = 0;i<6 ;i++ ) { System.out.print(" " + ziehung [i]) ; } // end of for System.out.println(); } public static void anzahlZiehungszahlen () {

} // Ende Methoden } // end of class ConLotto

Danke im Voraus schon mal!

...zur Frage

C++ Programmierung Matrizen Frage zur Verständnis?

Guten Abend Leute,

ich habe eine Frage an euch, ich hoffe ihr könnt mir weiterhelfen.

Ich habe eine C++ Aufgabe, die ich versuche zu lösen und bin bezüglich auf dem richtigen Weg, wäre nicht die Aufgabenstellung, die zu verwirrend für mich ist und zwar folgendes:

a) Schreiben Sie eine main-Funktion, in der Sie eine 2x3 Matrix A mit folgenden Werten anlegen:

1 2 3

A = 1 2 3

b) Implementieren Sie nun die Methode PrintMatrix(), die die Elemente der Matrix in Zeilen und Spalten geordnet ausgibt. Einzelne Spalten sollen durch Leerzeichen getrennt werden, jede Zeile der Matrix soll in einer neuen Zeile in der Ausgabe beginne. Die Ausgabe für die Matrix A aus dem vorigen Aufgabenteil, soll wie folgt aussehen:

1 2 3

A = 1 2 3

Verwenden Sie in ihren Implementierungen die Methode GetEntry, um die Datenelemente auszugeben.

Meine Frage ist, ob ich mit der Funktion void PrintMatrix zuviel in einem Ruck gemacht habe? Ich soll ja noch die Methode GetEntry implementieren aber ich weiß nicht, wie ich das machen soll, ich bin bisschen ratlos. Vielen Dank!!

#include <iostream>

using namespace std;

void PrintMatrix()

{

int MatrixA [2][3] = {{1,2,3},{1,2,3}};

for (int i = 0; i<2; ++i)

{

for (int j = 0; j<3; ++j)

{

cout << MatrixA [i][j] << "\t";

}

cout << endl;

}

}

int main()

{

PrintMatrix();

return 0;

}

...zur Frage

Wie muss ich die Funktion TaskDialog aus der Comctl32.dll ansprechen?

Hallo,

Ich versuche gerade – mit BlitzBasic, was hier aber nichts zur Sache tut –, die Funktion TaskDialog der Comctl32.dll, Version 6 anzusprechen.
(Link MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/bb760540.aspx)

Aber wie lautet der genaue Funktionsname? Weder aus meinem Basic, noch mittels rundll32.exe (zum Testen) wird TaskDialog() gefunden!
Wenn es diese feinen Klammern – "(version 6)" – geht, wie gebe ich dies genau an? (Originalgetreue Manifest-Datei für die fertige EXE, habe da keine Erfahrung, oder API-Befehl)

Vielen Dank für eure Hilfe! :-)

Mit freundlichen Grüßen,
KnorxThieus (m)

...zur Frage

Java - Parameter, Variablen, Methoden

Kann mir jemand erklären, worin der Zusammenhang zwischen einem Parameter, einer Variable und einer Methode in Java besteht? Das erschließt sich mir nicht ganz.

Vielen Dank schonmal im Voraus :)

...zur Frage

Sehr geehrte Community, wozu dienen Methoden in Java und wie werden sie aufgerufen?

...zur Frage

Unterschied von int und void?

Ich bin dabei mir c# beizubringen. Allerdings frage ich mich da was der unterschied bei der mothode static in main() und static void main() ist. Ich weiß nur, das bei int eine schließung über return 0;/1;/oder -1; folgt. Bei void geschieht dies auch und bei int wird der daten angebeben, bei void nicht. Bei den beispielprogrammen aus dem buch fand ich aber bei keinen der methoden angegebene daten, außer console.writeline(). Dies dann aber auch bei beiden.

P.s. ich bin noch nicht weit und das internet bringt auch keine fragelösung in mein gehirn

...zur Frage

Was möchtest Du wissen?