Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

[Java] Klassenvariable zurücksetzen





Frage

Mahlzeit! nehmen wir mal an, in meinem Programm gibt es in einer Klasse die Klassenvariable String v = "s". Wenn ich zur Lebenszeit eines Objektes die Klassenvariable in v = "d" ändere, und nach Vernichtung des Klassenobjektes (null setzen) eine neue Instanz generiere, ist v = "d". Das ist soweit noch OK. Problem: Wenn ich es aber für notwendig halte, eine Instanz der Klasse zu generieren, die wieder den originalen Klassenzustand wie beim erstmaligen benutzen hat ist das scheinbar nicht möglich. Gibt es dafür doch noch eine Lösung? DANKE!

Antwort 1 von mr_x_hacker

Hi,

Du benutzt paar nicht ganz verständliche Ausdrücke...
Zitat:
nach Vernichtung des Klassenobjektes (null setzen)

Was ist ein Klassenobjekt? Eine Instanz dieser Klasse nehme ich mal an...
Null setzen ist nicht gleichbedeutend mit "vernichten" - der GarbageCollector räumt es irgendwann weg, wenn es keiner mehr braucht, aber das muß nicht sofort nach " o = null; " der Fall sein...

Du sprichst von Klassenvariablen - meinst also eine "static"-Variable, ja? Diese werden genau einmal initialisiert, und zwar beim Laden der Klasse (nicht Anlegen eines Objektes!) durch den Classloader... danach nie wieder, d.h. Du mußt sie manuell zurücksetzen, wenn sie wieder ihren Anfangswert haben soll...
Wann soll sie denn zurückgesetzt werden? Beim Zerstören eines Objektes? Dafür gibt es finalize()...

Ansonsten erkläre bitte noch mal deutlicher, was es werden soll :)

Ciao Sascha

Antwort 2 von Binärchaot

Hi mr_x_hacker,

vielen Dank für Deine Antwort. Du hast ja alles richtig verstanden.

Klassenobjekt = Objekt einer Klasse = Instanz

Das mit dem Garbage-Collector und der Speicherbereinigung ist mir bekannt. Allgemein zu meiner Arbeit: Mir geht es darum, dass beim erneuten Öffnen eines Fensters alles neu initialisiert wird. Um die Kontrolle über die Objekte zu haben entwerfe ich alles mit Singleton-Mustern...

Klassenvariable = static

Kann man den Classloader dazu bringen die Klasse erneut zu laden und somit die static-Variablen wieder in den Ursprungszustand zurückversetzen?

Vielen Dank vorab!

Antwort 3 von mr_x_hacker

Hi,

klingt kompliziert... man kann vermutlich irgendwie einen eigenen Classloader schreiben, und mit dem eine Klasse manuell laden... was der aber tut, wenn sie eigentlich schon vom SystemClassloader geladen wurde, weiß ich grade nicht...

Wie wäre es denn mit einer static init()-Methode, die Deine Werte wieder zurücksetzt, Singleton-Instanzen neu anlegt, etc...? Die rufst Du dann einfach auf, und fertig...

Überhaupt:
Zitat:
Um die Kontrolle über die Objekte zu haben entwerfe ich alles mit Singleton-Mustern...

Ich verstehe zwar nicht genau, über was Du die Kontrolle haben willst, aber wenn Du Klassen neu laden willst, um Werte zu resetten, hast Du vielleicht bischen zu viel "static" gemacht oder so? :) Also für sowas gibt es eben grade Objekte und Instanzvariablen...

Ciao Sascha

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: