Hallo,
ich habe hier etwas implementiert, und erst im Nachhinein frage ich mich, wie(so) das überhaupt funktioniert:
So, die Frage ist folgende: Wenn ich in der main-Methode die Anweisung lösche, dann erscheint kein Log-Fenster.
Wenn sie drin steht, dann schon. Daraus schließe ich:
Die Anweisung:
wird beim Programmstart nicht automatisch ausgeführt. Finde ich auch logisch, denn alles ist sequentiell, und alles
beginnt in der main. Es gibt keinen Weg von der main hierher, also ok.
1. Verständnisfrage: Wieso darf man sowas dann überhaupt, also ein neues Objekt erstellen bei den Instanzvariablen, ich meine das steht ja nicht mal in einer Methode oder sonst was..
2. Frage: Wann wird das ausgeführt? So wie es aussieht, erst wenn man die Methode add() aufruft. Aber wie kommt add() dazu, das Objekt LOG zu erstellen?
Ich finde das etwas seltsam.. Ich rufe in der main() die Methode add() auf, die ja mit der INSTANZ LOG etwas tut. Aber zu diesem Zeitpunkt gibt es die Instanz ja noch nicht mal. Würde es sie geben, dann wär das Fenster ja schon lang sichtbar.. (right?)
Also wie managed Java das? Kann ich so eine Zeile bei den Instanzvariablen:
etwa so verstehen:
Die Instanz LOG der Klasse Log wird erstellt, wenn (kausal und auch zeitlich gesehen) dieses Objekt
benutzt wird? D.h. also sowas wie eine Vor-Reservierung?
Was passiert hier genau mit dem Heap und Stack, was is da los, wieso krieg ich keine Exception, wieso
darf ich ne Methode anwenden auf ein Objekt, dass es scheinbar gar nicht gibt...
Sehr interessant :bae:
ich habe hier etwas implementiert, und erst im Nachhinein frage ich mich, wie(so) das überhaupt funktioniert:
Code:
public class Main{
public static void main(String[] args){
Log.add("weird...");
}
}
public class Log{
private static final Log LOG = new Log();
private int egal;
public Log(){
new Console().setVisible(true); // Console = ein JFrame
}
public static void add(String s){
LOG.egal++;
}
}
So, die Frage ist folgende: Wenn ich in der main-Methode die Anweisung lösche, dann erscheint kein Log-Fenster.
Wenn sie drin steht, dann schon. Daraus schließe ich:
Die Anweisung:
Code:
private static final Log LOG = new Log();
wird beim Programmstart nicht automatisch ausgeführt. Finde ich auch logisch, denn alles ist sequentiell, und alles
beginnt in der main. Es gibt keinen Weg von der main hierher, also ok.
1. Verständnisfrage: Wieso darf man sowas dann überhaupt, also ein neues Objekt erstellen bei den Instanzvariablen, ich meine das steht ja nicht mal in einer Methode oder sonst was..
2. Frage: Wann wird das ausgeführt? So wie es aussieht, erst wenn man die Methode add() aufruft. Aber wie kommt add() dazu, das Objekt LOG zu erstellen?
Ich finde das etwas seltsam.. Ich rufe in der main() die Methode add() auf, die ja mit der INSTANZ LOG etwas tut. Aber zu diesem Zeitpunkt gibt es die Instanz ja noch nicht mal. Würde es sie geben, dann wär das Fenster ja schon lang sichtbar.. (right?)
Also wie managed Java das? Kann ich so eine Zeile bei den Instanzvariablen:
Code:
private static final Log LOG = new Log();
Die Instanz LOG der Klasse Log wird erstellt, wenn (kausal und auch zeitlich gesehen) dieses Objekt
benutzt wird? D.h. also sowas wie eine Vor-Reservierung?
Was passiert hier genau mit dem Heap und Stack, was is da los, wieso krieg ich keine Exception, wieso
darf ich ne Methode anwenden auf ein Objekt, dass es scheinbar gar nicht gibt...
Sehr interessant :bae: