функция в конструкторе не должна загружаться при возврате в Angular

Что фактически вызывает java.lang.StackOverflowError, как правило, является непреднамеренной рекурсией. Для меня часто бывает, когда я намеревался вызвать супер метод для метода overidden. Например, в этом случае:

public class Vehicle {
    public void accelerate(float acceleration, float maxVelocity) {
        // set the acceleration
    }
}

public class SpaceShip extends Vehicle {
    @Override
    public void accelerate(float acceleration, float maxVelocity) {
        // update the flux capacitor and call super.accelerate
        // oops meant to call super.accelerate(acceleration, maxVelocity);
        // but accidentally wrote this instead. A StackOverflow is in our future.
        this.accelerate(acceleration, maxVelocity); 
    }
}

Во-первых, полезно знать, что происходит за кулисами, когда мы вызываем функцию. Аргументы и адрес того, где был вызван метод, помещаются в стек (см. http://en.wikipedia.org/wiki/Stack_ (abstract_data_type) #Runtime_memory_management ), чтобы вызываемый метод мог доступа к аргументам и так, чтобы, когда вызываемый метод был завершен, выполнение может продолжаться после вызова. Но так как мы вызываем this.accelerate (ускорение, maxVelocity) рекурсивно (рекурсия отсутствует при вызове метода. Подробнее см. В http://en.wikipedia.org/wiki/Recursion_ (computer_science) ), мы находимся в ситуации, известной как бесконечная рекурсия, и мы продолжаем складывать аргументы и возвращать адрес в стеке вызовов. Поскольку стек вызовов конечен по размеру, мы в конечном итоге заканчиваем пространство. Запуск пространства в стеке вызовов называется переполнением. Это связано с тем, что мы пытаемся использовать больше пространства стека, чем у нас, и данные буквально переполняют стек. На языке программирования Java это приводит к исключению среды выполнения java.lang.StackOverflow и немедленно остановит программу.

Приведенный выше пример несколько упрощен (хотя это случается со мной больше, чем я хотел бы признать). То же самое может произойти в более круглом режиме, что затрудняет отслеживание. Однако, как правило, StackOverflow, как правило, довольно легко разрешать.

В теории также возможно переполнение стека без рекурсии, но на практике это выглядит как довольно редкий случай.

0
задан Testing Anurag 4 March 2019 в 09:34
поделиться

1 ответ

Если я вас правильно понимаю, у вас есть логика инициализации, которая должна была произойти только один раз, так что о том, чтобы сказать нам, раз за раз?

Что означает эта логика? На самом деле нам потребуется больше информации, чтобы помочь вам на уровне разработки.

Чего ты хочешь достичь?

0
ответ дан Gianni Calmettes 4 March 2019 в 09:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: