Statische? Klassen?

angekommen in einer .java Datei werden mehrere Klassen deklariert. ich kann in der Hauptklasse (die dann gestartet) wird ein Objekt benutzen ohne eine Instanz zu erzeugen (mit new…)

meine Frage nun: was macht die JRE VM mit dem Konstruktor dieser Klasse bzw. dem GarbageCollector? wie werden die static variablen usw. gespeichert?

normalerweise kann ich doch ein Objekt nur benutzen wenn ich es z.b. mit String sz = new Sting(„sdlfj“) erzeuge.

es funktioniert aber auch
MeineKlasse.methode();

ohne das ich vorher von MeineKlasse eine Variable erzeugen muß.

(unnötig zu erwähnen, das ich in diversen InfoQuellen und dicken Büchern nichts dazu gefunden hab :wink:

meine Frage nun: was macht die JRE VM mit dem Konstruktor
dieser Klasse bzw. dem GarbageCollector? wie werden die static
variablen usw. gespeichert?

Der Konstruktor einer Klasse wird nur beim instanzieren mit new aufgerufen.

Statische Methoden können auch nur auf statische Member zugreifen, die kannst du wiederum entweder bei der Deklaration initialisieren:

public static Vector m\_vMyVector = new Vector();

oder durch eine statische Methode, z. B.:

public static void initialize()
{
 m\_vMyVector = new Vector();
}

    
    
    Diese Member werden AFAIK erst gelöscht, wenn die VM beendet wird.
    
    Grüße, Robert

meine Frage nun: was macht die JRE VM mit dem Konstruktor
dieser Klasse

Nichts, es wird ja kein Objekt konstruiert.

wie werden die static
variablen usw. gespeichert?

Genau weiss ich das auch nicht, ich weiss nur das je Klasse die statische Variable einmal existiert… der Container (die VM) wird dann wohl irgendwo im Speicher dieses Objekt bis zur Beendigung der VM halten.

normalerweise kann ich doch ein Objekt nur benutzen wenn ich
es z.b. mit String sz = new Sting(„sdlfj“) erzeuge.

normalerweise schon, aber bei statischen Funktionen ist das was anderes.

es funktioniert aber auch
MeineKlasse.methode();
ohne das ich vorher von MeineKlasse eine Variable erzeugen
muß.

Ja das geht. Aber die Methode darf z.B. keine Felder (ausser statischen) der Klasse benötigen, weil ja keien Instanz existiert.
Statische Funktionen kannst du immer dann machen, wenn sie unabhängig sind von einem speziellen Objekt.
Z.B. wenn du einen String umwandeln willst, gibst du ihn als Parameter rein und als Rückgabewert wieder raus.

Im JDK gibt es viele Funktionen die so implementiert sind, z.b. Integer.parseInt(String) etc.

Vorteil ist eben der, dass du kein Objekt dafür angelegen musst.