Hi,
ich habe da mal ein ganz grundsätzliche Frage zu der Lebensdauer von Objekten und deren Initialisierung von Variablen.
Mein Problem:
Ich rufe ein Objekt im Hauptprogramm auf und habe einen Mechanismus, dass dieses nochmal erneut aufgerufen wird. Hintergrund ist, dass über diesen Weg ein erneutes Einlesen einer Konfigurationsdatei, Initialisierung der DB-Verbindung und dergleichen erneut statt finden soll.
Hier das kleine Startprogramm:
und im folgenden die Klasse in der eigentlich alles passiert:
Das Problem: Durch den Loop in der main-Prozedur besteht die Möglichkeit das Hauptprogramm (die Klasse ExampleMain) erneut aufzurufen. Das funktioniert auch, allerdings werden die Klassenvariablen nicht mehr initialisiert, hier am Beispiel der Variablen bCheck. Diese wird beim zweiten Aufruf nicht auf true gesetzt.
In der main-Prozedur wird das Objekt mit new ExampleMain(args) instanziert und nachdem das Objekt beendet wurde, hätte ich erwartet, dass der GC dann dieses auch wegräumen würde. Bei dem erneuten Aufruf mit new ExampleMain(args) habe ich angenommen, dass dann auch das komplette Objekt neu im Speicher erzeugt wird und somit auch die Klassenvariablen neu initialisiert werden. (Wie gesagt: Wenn ich das Debugge ist das nicht der Fall. Die Variable bCheck hat dann den Wert false).
Habe ich da ein falsches Verständnis über die Lebensdauer von Objekten?
(Übrigens, eine programmtechnische Lösung ist hier nicht das Problem, da ich dann in ExampleMain die Variablen später nochmal initialisieren würde. Mir geht es ums Grundsätzliche).
Danke Lutz
ich habe da mal ein ganz grundsätzliche Frage zu der Lebensdauer von Objekten und deren Initialisierung von Variablen.
Mein Problem:
Ich rufe ein Objekt im Hauptprogramm auf und habe einen Mechanismus, dass dieses nochmal erneut aufgerufen wird. Hintergrund ist, dass über diesen Weg ein erneutes Einlesen einer Konfigurationsdatei, Initialisierung der DB-Verbindung und dergleichen erneut statt finden soll.
Hier das kleine Startprogramm:
Code:
public class Example {
public static void main(String args[]) {
boolean bCheckReboot = false;
do {
new ExampleMain(args);
// wenn eine besondere Bedingung eingetreten ist und
// bCheckReboot true wird, erfolgt ein Neustart des
// Programms
bCheckReboot = checkStopfile();
}
while (bCheckReboot);
}
}
und im folgenden die Klasse in der eigentlich alles passiert:
Code:
public class ExampleMain {
private static String version = "1.0.0";
private static boolean bCheck = true;
public ExampleMain(String args[]) {
...
if (bCheck){
bCheck = false;
// macht hier noch andere Dinge
}
...
return;
}
}
Das Problem: Durch den Loop in der main-Prozedur besteht die Möglichkeit das Hauptprogramm (die Klasse ExampleMain) erneut aufzurufen. Das funktioniert auch, allerdings werden die Klassenvariablen nicht mehr initialisiert, hier am Beispiel der Variablen bCheck. Diese wird beim zweiten Aufruf nicht auf true gesetzt.
In der main-Prozedur wird das Objekt mit new ExampleMain(args) instanziert und nachdem das Objekt beendet wurde, hätte ich erwartet, dass der GC dann dieses auch wegräumen würde. Bei dem erneuten Aufruf mit new ExampleMain(args) habe ich angenommen, dass dann auch das komplette Objekt neu im Speicher erzeugt wird und somit auch die Klassenvariablen neu initialisiert werden. (Wie gesagt: Wenn ich das Debugge ist das nicht der Fall. Die Variable bCheck hat dann den Wert false).
Habe ich da ein falsches Verständnis über die Lebensdauer von Objekten?
(Übrigens, eine programmtechnische Lösung ist hier nicht das Problem, da ich dann in ExampleMain die Variablen später nochmal initialisieren würde. Mir geht es ums Grundsätzliche).
Danke Lutz