# einfache Multiplikation



## Kapitän (12. Mrz 2008)

hallo,
ich möchte ein einfachstes Multiplikationscode schreiben; läuft leider nicht...
Eclipse sagt: Cannot make a static reference to the non-static field a, b, c.
und schlägt mir vor b zu einen static byte zu machen?


```
public class rechteck {
   byte a=5, b=4, c;
 
   public static void main(String[] args) {
 c = a * b;

System.out.println ('c');
	}

}
```

Ist das wirklich mein Problem, dass ich b als static byte klassifizieren muss?
Wenn ja, warum?
Oder kann ich's auch einfacher "lösen"?

vielen Dank


----------



## ARadauer (12. Mrz 2008)

static gibt es immer nur einmal, also in jedem objekt der klasse ist der static wert gleich. 
du kannst aus einer static methode, (die man von der klasse aufrufen kann, nicht vom objekt) nur auf static variablen zugreifen.

entweder du machst a,b und c static

oder du instanzierst in deinem main ein neues rechteck, zb so...

```
Rechteck r = new Rechteck();
r.c = r.a * r.b;
System.out.println (r.c);
```


```
System.out.println ('c');
```
du gibt hier nicht die variable c aus sondern einfach einen buchstaben c

Wichtig! Klassen schreibt man groß!


----------



## Kapitän (12. Mrz 2008)

_Beitag gelöscht_


----------



## Kapitän (12. Mrz 2008)

ok, danke soweit.
Ich hoff mir kann nochmal jmd etwas erklären.

Also ich habe hier den Code. Was mich verwirrt, ist, warum ich Zeile 7 "(byte)" vor die Rechnung setzen muss. Tue ich das nicht, kriege ich die Fehlermeldung, dass nicht int in byte konvertiert werden kann; obwohl doch alle Variablen in byte sind.


```
public class rechteck {
  static byte a=5;
  static byte b=4;
  static byte c;

public static void main(String[] args) {
  c = (byte) (a * b);

System.out.println (c);
	}

}
```


----------



## Jango (12. Mrz 2008)

Im Buch "Java ist auch eine Insel" über explizite Konvertierung nachlesen.


----------



## Kapitän (12. Mrz 2008)

ja, aber alle Variablen sind doch byte.
Warum meint eclipse dann, dass mindestens eine int ist?


----------



## Janus (12. Mrz 2008)

der multiplikationsoperator * konvertiert die parameter implizit nach int und liefert als ergebnis wiederrum int zurück. da 'c' als byte deklariert ist und die konvertierung von int nach byte verlustbehaftet ist, schmeisst dir der compiler einen fehler um die ohren.

und lies mal irgendein buch über java und vergiss den c stil lieber schnell wieder


----------

