Problem mit static

testen1t7

Mitglied
Hallo,

ich bin noch ein Java Anfänger und sitze nun schon über 2 stunden an diesen kleinen stück code. also die idee ist, dass 2 objekte angelegt werden und die ein alter zugewiesen bekommen welches dann in der methode hatGeburtstag() um eins erhöht wird. ausgegeben werden sollen also beide objekte mit ihrem alter vor und nach geburtstag. leider scheitert es bei mir anscheinend an static und instance. ich habe schon tausende varianten und anpassungen probiert, ein ähnlicher code mit einer void weniger funktioniert bei mir seltsamerweise.

Die Konsole gibt nur folgendes aus:
Vorher:
24
Nachher:
25

Also wurde nur das Alter vom zweiten objekt ausgegeben. ich brauche hier wirklich hilfe!
--------------------------------------------------------------------------------------------------

Java:
public class PeterDieAlteSau {
  
   private static int geburtstag;
   static PeterDieAlteSau peter = new PeterDieAlteSau(18);
   static PeterDieAlteSau peters = new PeterDieAlteSau(24);
  
   PeterDieAlteSau(int Geburtstag){
       PeterDieAlteSau.geburtstag = Geburtstag;
      
   }
      
   static void getGeburtstag(){
       System.out.println(PeterDieAlteSau.geburtstag);
      
   }
  
   static void hatGeburtstag(){
       PeterDieAlteSau.geburtstag = PeterDieAlteSau.geburtstag +1;
   }

   public static void main(String[] args) {
      
       System.out.println("Vorher: ");
       PeterDieAlteSau.getGeburtstag();
       PeterDieAlteSau.hatGeburtstag();
       System.out.println("Nachher: ");
       PeterDieAlteSau.getGeburtstag();
      
   }

}
 
Zuletzt bearbeitet von einem Moderator:
Bitte Code-Tags benutzen.

So ein Problem löst man nicht mit statischen Attributen. Es soll ja, soweit ich das verstanden habe, jedes Objekt ein separates Alter haben und nicht beide dasselbe.

Code:
class Whatever {

    int geburtstag;

    //...

}

Code:
class Test {

    public static void main(String[] args) {
        Whatever eins = new Whatever();
        Whatever zwei = new Whatever();

        eins.geburtstag++;
        zwei.geburtstag += 10;

        System.out.println("Eins: " + eins.geburtstag);
        System.out.println("Zwei: " + zwei.geburtstag);
    }

}
 
@testen1t7 : kennst du überhaupt die Bedeutung von static ?
bei static braucht man keine objekte zu initialisieren, damit es funktioniert, oder? ich habe das auch ohne static versucht, doch jedesmal wenn ich eine methode in der main aufrufen wollte, gab es nur den fehler dass ich die methode doch bitte static machen sollte und dann musste ich auch noch die variablen ändern. so richtig einleuchtend ist mir das jetzt irgendwie nicht. habe schon etliche videos zu diesem thema gesehen... :/
 
Hier vielleicht nochmal dein Beispiel aufgegriffen.
Geburtstag sollte normalerweise ein Datum sein, deswegen habe ich um es einfacher zu gestallten den Geburtstag durch Alter ersetzt. Ergibt auch mehr Sinn, wenn man um ein Jahr älter wird und nicht das der Geburtstag um eins hochgezählt wird... oder?

Java:
public class Person {
   private String name;
   private int alter;
 
   Person(String name, int alter){
       this.name = name;
       this.alter = alter;
   }
    
   public int getAlter(){
       return alter;
   }
 
   public void feiertGeburtstag(){
       alter++;
   }
}

Java:
public class GeburtstagsBeispiel {
    public static void main(String[] args) {
        Person peter = new Person("Peter", 10);
        Person gabi = new Person("Gabi", 12);

        System.out.println(peter.getAlter());
        peter.feiertGeburtstag();
        System.out.println(peter.getAlter());
        System.out.println(gabi.getAlter());
    }
}

static bezieht sich übrigens auf die Klasse und nicht auf die Instanz einer Klasse. Die Instanz einer Klasse erzeugst du mit dem Schlüsselwort "new". Die Klasse kannst du dir als Bauplan vorstellen und die Instanz als das fertig gebaute Objekt.

Wenn deine Klasse zum Beispiel ein "public static int personenAnzahl;" enthält, hat nicht Peter oder Gabi das Attribut sondert diese Variable gehört zum Bauplan "Person".
Du kannst dann mit Person.personenAnzahl darauf zugreifen, egal wo du dich in deinem Code befindest. Beispielsweise könntest du so eine Variable benutzten um sie in Konstruktor zu erhöhen. Dann weißt du wie viele Personen Objekte du schon erstellt hast.

Statische Variablen versucht man aber meistens zu vermeiden und beschränkt sich zum größten Teil darauf, diese als Konstanten zu verwenden.
"public static final int KONSTANTE = 10;"
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben