# konstante eigene farben im programm definieren



## Dilandau (22. Mrz 2004)

Ich versuche ein array aus konstanten Color objekten mit eigenen farbwerten am Programmanfang als statisch zu definieren.

So (die drei zahlen sollen die werte fpr rot, grün und blau sein und das array bekommt erstmal nur ein objekt, später mehr):


```
private final static Color[] colors = {(Color){175,186,140}};
```

Natürlich meldet javac einen fehler. Wie schreibt man das?


Alternativ soll für manche spätere elemente das #abcdef format eingesetzt werden. Wie schreibt man das in java?


----------



## Illuvatar (22. Mrz 2004)

```
private final static Color[] colors = {new Color (175, 186, 140), new Color (0, 0, 0); usw...};
```

*Wenn du ein Array final machst, können die einzelnen Elemente trotzdem noch verändert werden.*

d.h.:


```
colors = new Color[5];
```
->Compilerfehler.


```
colors[0] = new Color (1, 2, 3);
```
->Funktioniert.


----------



## Beni (22. Mrz 2004)

```
private final static Color[] colors = { new Color(175, 186, 140), new Color( 255, 0, 0 ) };
```

Edit: verdammt, schon wieder zu spät


----------



## lhein (23. Mrz 2004)

> Wenn du ein Array final machst, können die einzelnen Elemente trotzdem noch verändert werden



Nanu, seit wann das denn? Ich dachte immer, das final eine Konstante bezeichnet, die im weiteren Programmverlauf nicht mehr änderbar ist ?!?

Bin ich jetzt seit Jahren auf dem Holzweg oder hast Du Dich da vertan?

LR


----------



## Beni (23. Mrz 2004)

Eine Variable die mit final bezeichnet wurde, kann man nicht mehr vertauschen. Aber dem ändern einzelner Einträge des Arrays veränderst du diese Variable ja nicht. (anders gesagt: final hat keinen Einfluss auf den inneren Aufbau eines Objektes, Einträge ändern gehört zu innerem Aufbau).

Hab ich jedenfalls so verstanden...

mfg Beni


----------



## lhein (23. Mrz 2004)

Aha, das wusste ich bisher nicht.
Werds bei Gelegenheit mal ausprobieren.

Danke
LR


----------



## Dilandau (23. Mrz 2004)

Was bezeichnest du mit "vertauschen"? Mir erscheint logisch, einen Wert, für den der Platz der selbe bleibt, im Ram stehend nachträglich jederzeit ändern kann, wenn man ihn nicht von der Speicherverwaltung o.ä. schützen lässt.


----------



## bygones (23. Mrz 2004)

Ist eine Variable als final deklariert, so kann man dieser Variable kein neues Objekt zu weisen !

Man kann aber dennoch das Objekt der Variable ändern. Das final bezieht sich somit nur auf die Variable die auf das Objek zeigt und nicht auf das Objekt an sich... (hoffe das war richtig und verständlich)


```
public class Tester {
 public static void main(String[] args) {
   final Dummy d = new Dummy(4);
    // geht
   d.i = 5;
   
   // geht nicht (<---- das meinte Beni mit vertauschen)
   d = new Dummy(5);
   }
  }

class Dummy {
  public int i;

  public Dummy(int i) { 
    this.i = i;
  }
}
```


----------



## Beni (23. Mrz 2004)

Eine Variable zeigt irgendwohin (ist ja nur ein Verweis, eine Referenz). Wenn man sie dazu bringt, woanders hinzuzeigen, hat man (das Ziel) vertauscht.
	
	
	
	





```
Object x = ...
x = blup; // hier wird x "vertauscht"
```
War ein wenig missverständlich, sorry...

mfg Beni


----------



## Dilandau (23. Mrz 2004)

Aha, ok.


----------



## citizen_erased (23. Mrz 2004)

erleichternd wäre auf die unterteilung zwischen "primitiven" und referenztypen hinzuweisen.
durch final kann der wert einer variablen nicht veränder werden. der wert einer variable vom typ int ist 5 und kann bei einer final deklarierten variablen nicht mehr verändert werden.
der wert eines variablen vom typ String ist eine referenz auf den ziel wert und kann nicht mehr verändert werden. der zielwert hingegen (z.b. "Tach!") kann jedoch noch verändert werden. 
nur referenztypen verfügen neben dem wert auch noch über einen zielwert.

[edit] na toll, warum schreib ich das denn, wenn ihr das sowieso kurz vorher postet [/edit]


----------



## Thanni (23. Mrz 2004)

> [edit] na toll, warum schreib ich das denn, wenn ihr das sowieso kurz vorher postet [/edit]



wie hat  
deathbyaclown 
letztens so schön geschrieben 

"Dafür schön erklärt" oder so ähnlich


----------



## Dilandau (23. Mrz 2004)

Ah jetzt ja. 

Aber was nutzt das? Um die varibale bei mehreren applets der selben klasse nur EINMAL im speicher zu haben, gibt's static.


----------



## bygones (23. Mrz 2004)

Thanni hat gesagt.:
			
		

> > [edit] na toll, warum schreib ich das denn, wenn ihr das sowieso kurz vorher postet [/edit]
> 
> 
> 
> ...



Ganz genau  :!:


----------

