Ошибка Exception in thread “main” java.lang.StackOverflowError

267
14 января 2018, 04:44

При запуске программы появляется ошибка:

Exception in thread "main" java.lang.StackOverflowError
    at Animal.<init>(Animal.java:54)
    at AnimalState.<init>(AnimalState.java:13)
    at Animal.<init>(Animal.java:54)
    at AnimalState.<init>(AnimalState.java:13)
    at Animal.<init>(Animal.java:54)...

Как можно устранить эту ошибку?

Главный класс

import java.time.Duration;
public class Save{
public static void main(String[] args){
    Animal cat = new Animal();
}

Класс Animal

import java.time.Duration;
public  class Animal
{ 
public static  int hoursSinceLastMeal = 3;
public static  int energyPercent = 87;
public static  int age = 7;
public static  boolean isProliferating = false;
public static  boolean isFeedingNewborns = true;
public static  int weight = 3;

public int getId() {
    return hashCode();
}

public Animal() {
    new AnimalState( hoursSinceLastMeal, energyPercent, age, isProliferating, isFeedingNewborns, weight );
}
} 

Класс AnimalState

    import java.time.Duration;
    import java.util.*;
    public class AnimalState extends Animal {
    public int hoursSinceLastMeal;
    public int energyPercent; 
    public int age; 
    public boolean isProliferating; 
    public boolean isFeedingNewborns;
    public int weight;
    public AnimalState( int hoursSinceLastMeal, int energyPercent, int age, 
    boolean isProliferating, boolean isFeedingNewborns, int weight){
    this.hoursSinceLastMeal = hoursSinceLastMeal;
    this.energyPercent = energyPercent;
    this.age = age;
    this.isProliferating = isProliferating;
    this.isFeedingNewborns = isFeedingNewborns;
    this.weight = weight;
    System.out.println(String.format("%s %s %s %s %s %s", 
    hoursSinceLastMeal, energyPercent, age, isProliferating, 
    isFeedingNewborns, weight));
    }
    }
Answer 1

Ты когда создаешь инстанс Animal, у тебя создается инстанс AnimalState(где опять же создается инстанс Animal, так как неявно вызывается конструктор базового класса), отсюда происходит зацикливание и стек вызовов переполняется.

READ ALSO
Ошибка в RecyclerView при вызове notifyItemRemoved(position)

Ошибка в RecyclerView при вызове notifyItemRemoved(position)

Ошибка появляется когда удаляю item из 0 позиции, если из других позиций удалять, то все окПрогуглил, прочитал что это ошибка в самом RecyclerView

252
Как проверить существует ли индекс?

Как проверить существует ли индекс?

Запускается некое приложениеКонектится к базе

245
Время и дата определяются не правильно

Время и дата определяются не правильно

Делаю чат с помощью FirebaseВозникла проблема с датой и временем

288
Android - загрузка изображения в базу данных

Android - загрузка изображения в базу данных

Я использую бесплатный хостинг, для практики

241