Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
2.4 Instanzvariablen und Klassenvariablen<br />
private static int cardCount = 0;<br />
Das Schlüsselwort static macht klar, dass es sich um eine Klassenvariable handelt. Im<br />
Gegensatz dazu sind sämtliche andere Attribute der Klasse Card und auch der Klasse<br />
UserFrame Instanzvariablen, da sie kein static vorangestellt haben.<br />
Schauen wir uns zuerst einmal an, wofür wir die Klassenvariable cardCount überhaupt<br />
benötigen. Sie wird allein in den zwei Zeilen<br />
setBounds(200+20*cardCount,0+20*cardCount,240,160);<br />
cardCount++;<br />
verwendet. setBounds() ist eine Methode der Klasse Component. Ähnlich wie die<br />
Methode setSize() ermöglicht sie das Festsetzen der Breite und Höhe (letzte zwei<br />
Parameter) einer Component. Im Unterschied zu dieser kann man aber mittels<br />
setBounds() die Component zusätzlich noch in ihrer Lage verschieben, indem man<br />
die Koordinaten der linken oberen Ecke (erste zwei Parameter) angeben kann 1 . Die<br />
Anweisung cardCount++ bewirkt, dass der Wert der Klassenvariablen cardCount<br />
um eins erhöht wird.<br />
Wenn das erste Mal der Konstruktor Card() aufgerufen wird, hat cardCount den Wert<br />
Null: die Klassenvariable wurde ja bei ihrer Deklaration gerade damit initialisiert. Die<br />
erste Instanz der Klasse Card wird also an der Stelle x = 200+20*0 = 200 und y =<br />
0+20*0 = 0 positioniert. Da nach dem Aufruf von setBounds() der Wert von<br />
cardCount um eins erhöht wird, wird die als zweite generierte Instanz an der Stelle x =<br />
200+20*1 = 220 und y = 0+20*1 = 20 plaziert. Weil cardCount mit jedem Aufruf des<br />
Konstruktors um eins erhöht wird und somit die x- bzw. y-Koordinaten jeweils um 20<br />
anwachsen, erscheinen die Visitenkarten auf dem Bildschirm leicht versetzt.<br />
Die Variable cardCount ist also ein Zähler, welcher die Anzahl der Instanzen der<br />
Klasse Card festhält. Was bedeutet dies nun, dass cardCount eine Klassenvariable ist?<br />
Die Klasse Card hat die Instanzvariablen title, firstName, familyName,<br />
street, zipCode und city, welche alle als Wert einen Text haben. Es ist klar, dass<br />
die Werte dieser Variablen von Instanz zu Instanz unterschiedlich ausfallen können, da<br />
man ja mehrere Personen erfassen und deren Visitenkarten ausgeben kann: so gibt es<br />
beispielsweise den Wolfgang Amadeus Mozart, aber auch seine Frau Konstanze Mozart.<br />
Bei diesen Variablen handelt es sich um Attribute, die gewissermassen eine einzelne<br />
Instanz beschreiben und somit mit einer Instanz assoziiert sind, weshalb man sie als<br />
Instanzvariablen bezeichnet.<br />
1 Die Methode setBounds() wird neben der Methode add(), welche eine Methode der Klasse<br />
Container ist, auch in der Methode place() verwendet. Dort wird zuerst eine Component mittels<br />
setBounds() relativ positioniert und danach mittels add() dem Container, also einer Instanz der<br />
Klasse UserFrame, hinzugefügt.<br />
54