# Schlechter Stil



## jonasvi (14. Jul 2016)

Guten Tag,

zu dem Code eine Frage:

```
public class Student {
  static int version = 12;
  int matrikel;

  public static void teste() {
    Student jessica = new Student();
    matrikel = 234567;
    jessica.matrikel = 123456;
    Student.matrikel = 456789;
    System.out.println( version );
    System.out.println( jessica.version );
    System.out.println( Student.version );
  }
}
```
Hier sollten nun falsche Anweisungen bzw schlechter Stil stecken (ist eine freiwillige Übungsaufgabe - Mathestudent)

Also wenn ich vor "int matrikel" noch ein "static" davorschreibe, geht die Fehlermeldung
"Cannot make a static reference to the non-static field Student.matrikel" weg.
Aber dann kommt die neue Fehlermeldung "The static field Student.matrikel should be accessed in a static way".

Das verwirrt etwas. Wo ist der triviale Fehler?


Mit freundlichen Grüßen,
jonasvi


----------



## Bitfehler (14. Jul 2016)

Wie die Aufgabenstellung schon aussagt, sind da Fehler drin. Ohne einigen Zeilen zu ändern bzw. zu löschen, wird es nicht gehen. Das Problem ist das statische-Sachen mit einem objektorientierten Ansatz vermischt werden, das sagt auch die Fehlermeldung.
Ohne die Aufgabe zu lösen, kann ich dir dazu keinen weiteren Hinweis geben.


----------



## jonasvi (14. Jul 2016)

Gut.


```
public class Student {
private int version = 12; 
int matrikel;

public void teste() {                <- hab hier das static weggemacht
Student jessica = new Student();
matrikel = 234567;
jessica.matrikel = 123456;
//Student.matrikel = 456789;    <- auskommentiert, weil ich nicht weiß was der Nutzen ist?
System.out.println( version );
System.out.println( jessica.version );
//System.out.println( Student.version ); <- auskommentiert s. o.
}
}
```

Wäre das so richtig? Oder am Sinn der Aufgabe vorbei?

Liebe Grüße,
jonasvi


----------



## mrBrown (14. Jul 2016)

das static bei den Methodendeklaration weg machen wäre für mich falsch


----------



## jonasvi (14. Jul 2016)

Mhm..

Aber, dass die Zuweisung mit Student.matrikel in dem Fall sinnlos ist, stimmt oder?

Liebe Grüße,
jonasvi


----------



## mrBrown (14. Jul 2016)

Ja, und noch eine andere Zuweisung...


----------



## jonasvi (14. Jul 2016)

mrBrown hat gesagt.:


> Ja, und noch eine andere Zuweisung...


  matrikel = 234567; 


Aber wie kann ich    System.out.println( jessica.version ); aufrufen.
Müsste man da noch eine getter Methode einbauen?


----------



## mrBrown (14. Jul 2016)

jonasvi hat gesagt.:


> Aber wie kann ich    System.out.println( jessica.version ); aufrufen.
> Müsste man da noch eine getter Methode einbauen?



Man kann Attribute auch ohne Getter ansprechen, solange die Sichtbarkeit passt. Hier ists im gesamten package sichtbar, wäre aber egal, da deine Funktion in der Klasse Student steht.


----------



## stg (15. Jul 2016)

mrBrown hat gesagt.:


> Man kann Attribute auch ohne Getter ansprechen, solange die Sichtbarkeit passt. Hier ists im gesamten package sichtbar, wäre aber egal, da deine Funktion in der Klasse Student steht.



Man kann übrigens auch mit Gettern die Attribute nur dann ansprechen, wenn die Sichtbarkeit (von den Gettern) passt


----------

