rydl hat geschrieben:
Die Objekte werden erzeugt wenn Du die class-Datei lädst und nicht wenn ein Exemplar von Dialog erzeugt wird!
ich glaub du meinst das richtige, aber das is so nich korrekt...
klassenvariablen sind schon statisch (zB "private static int X = 3") und werden beim start des programms (nicht beim "laden der class dateien") einmal erzeugt.
in dem source gibts allerdings nur ganz normale instanzvariablen (ohne static deklarierung). so wie es da steht ist das natürlich etwas unelegant...
nach dem starten des programms werden nicht einfach alle instanzvariablen (die dinger "oben") instanziiert, die in deinem source deklariert wurden. es gibt ja genau gesehen 2 schritte, die nötig sind eine instanz eines objekts zu erzeugen:
Das kann ich wiederlegen:
class A
{
public static String foo = "A: static foo";
static
{
System.out.println ("A: static initializer");
}
}
class B
{
public static String foo = "B: static foo";
static
{
System.out.println ("B: static initializer");
}
}
public class InitStaticsWhen
{
public InitStaticsWhen (String param)
{
if (param.equals ("jetzt"))
{
System.out.println ("Loading A " + A.foo);
}
System.out.println ("Loading B " + B.foo);
}
public static void main (String args[])
{
String param = "jetzt";
if (args.length == 1)
{
param = args[0];
}
new InitStaticsWhen (param);
}
}
Zu starten mit
java InitStaticsWhen jetzt
java InitStaticsWhen nie
Schlußfolgerung: Nicht beim Starten des Programms, sondern beim Laden der Klasse werden statische Objekte erzeugt.
rydl hat geschrieben:
1. deklaration deiner variablen (zB "JTextField textField;" )
2. instzanziierung des objekts (zB "textField = new JTextField();" )
natürlich kann man das ganze auch in einem schritt machen, doch in deinem fall gibt es einen nachteil:
du hast keine kontrolle über deine instanzvariablen, deshalb schreibt man, bis auf wenige ausnahmen eigentlich alle deklarationen der instanzvariablen "oben" hin, ohne sie zu instanziieren und der konstruktor übernimmt dann diese aufgabe. wenn du für deine objekte mal mehre konstruktoren benutzt, wirst du den vorteil erkennen.
Und wenn nicht, dann nicht.
Es ist meistens nur eine Geschmacksfrage, und wenn es einen Unterschied macht, dann kann man es ja so machen, wie es in dem Falle richtig oder günstig ist.
rydl hat geschrieben:
dann wird dein programm eventuell etwas performanter, wenn nicht bei jedem "new" alle variablen erzeugt werden, sondern nur die, auf die es ankommt...
Wenn es auf manche Attribute manchmal nicht ankommt, dann verströmt das Design bereits einen verdächtigen Geruch.
Und das es die berühmte Ausnahme ist, die auch noch gleich performancekritisch ist - das klingt doch arg konstruiert.