Java Fehlermeldung; Java.long.Stackoverflowerrror mit 2 Klassen, Fehlerfindung vergebens

vram78

Lieutenant
Registriert
Dez. 2015
Beiträge
717
Hi,
Ich lerne zurzeit Java und das Konzept der objektorientierten Programmierung. Beim ausführen des Codes bekomme ich folgende mehrmals hintereinander (1000x) folgende Fehlermeldung:
Code:
Exception in thread "main" java.lang.StackOverflowError
    at Windlage.<init>(Windlage.java:21)
    at Windlage.<init>(Windlage.java:21)
    at Windlage.<init>(Windlage.java:21)
    at Windlage.<init>(Windlage.java:21)
    at Windlage.<init>(Windlage.java:21)
    at Windlage.<init>(Windlage.java:21)
    at Windlage.<init>(Windlage.java:21)
    at Windlage.<init>(Windlage.java:21)
    at Windlage.<init>(Windlage.java:21)
[...]

Der Code:

Java:
public class Fahrzeug {

   
   
   
    public static void main(String[] args)  {
       
        Windlage windlage = new Windlage(23, "kmh");
       
        Fahrzeug BMW = new Fahrzeug();
        Fahrzeug Audi = new Fahrzeug();
        Fahrzeug Bugatti = new Fahrzeug();

        System.out.print(windlage);
    }

}

Java:
public class Windlage {

   
    public Windlage(int s, String a) {
       
        if(s >= 100) {
            System.out.print("Windgeschwindigkeit zu groß");
        } else if(s<100) {
            System.out.println("Windgeschwindigkeit ideal");
        }
       
    }

    public Windlage() {
       
    }

   
   
    Windlage schnell = new Windlage(120, "kmh");
    Windlage mittel = new Windlage(70, "kmh");
    Windlage langsam = new Windlage(40, "kmh");
   

   
}

Google spuckt mir folgendes aus: Thrown when a stack overflow occurs because an application recurses too deeply.
Was rekursive Methoden sind weiß ich ja, aber ich habe doch gar keine rekursive Methode irgendwo im Code stehen. Das einzige was ich habe sind 2 Konstruktoren und die main Methode. :confused_alt:

MFG
 
Zuletzt bearbeitet: (Ergänzung)
Deine Klasse Windlage enthält 3 Variablen vom Typ Windlage die direkt initialisiert werden, deshalb hast du dort eine Endlosschleife.
 
Die Windlage enthält drei weitere Elementvariablen der Windlage, welche wiederrum drei Elementvariablen enthalten und so weiter.
 
KitKat::new() schrieb:
Entferne Mal Zeile 20 bis 22 aus der zweiten Datei
jap oder in einen public static void main funktion packen...wobei er wohl versucht konstanten zu definieren. das würde ich als public static final machen in der klasse fahrzeug?
Ergänzung ()

Ebrithil schrieb:
Deine Klasse Windlage enthält 3 Variablen vom Typ Windlage die direkt initialisiert werden
...sobald new Windlage aufgerufen wird...dort werden wieder 3 mal new Windlage...fertig ist die unendliche rekursion und der stack overflow
 
  • Gefällt mir
Reaktionen: KitKat::new()
Oder Zeilen 20-22 als static deklarieren, damit der Konstruktor nur jeweils einmal aufgerufen wird.
 
Bin verwirrt. Was hat der Konstruktor "()" mit dem Konstruktor "(int, string)" zu tun? :confused_alt: Da ist nichts rekursiv. Einer ruft den anderen auf. Fertig.

Allerdings hat class Windlage keinerlei Attribute, Methoden oder sonst irgendwas. Da würde ich mal ansetzen. Und sei es nur public int speedValue und public string measurementUnit.
 
RalphS schrieb:
Die Zeilen 20-22 bewirken, dass für jedes Objekt drei neue Objekte erzeugt werden, was indirekt eine Rekursion erzeugt. Wenn man die 3 Felder als static deklariert, gibt es keine Rekursion mehr.
 
Zurück
Oben