Используйте clickEvents в блестящем с Tmap

Что такое java.lang.StackOverflowError

Ошибка java.lang.StackOverflowError выводится, чтобы указать, что стек приложения был исчерпан из-за глубокой рекурсии, т. е. ваша программа / сценарий слишком сильно повторяется.

Подробности

StackOverflowError расширяет класс VirtualMachineError, который указывает на то, что JVM закончила или закончила работу и не может работать дальше. VirtualMachineError, который расширяет класс Error, используется для обозначения тех серьезных проблем, которые приложение не должно ловить. Метод не может объявлять такие ошибки в своем предложении throw, потому что эти ошибки являются ненормальными условиями, которые никогда не ожидались.

Пример

Minimal, Complete, and Verifiable Example:

package demo;

public class StackOverflowErrorExample {

    public static void main(String[] args) 
    {
        StackOverflowErrorExample.recursivePrint(1);
    }

    public static void recursivePrint(int num) {
        System.out.println("Number: " + num);

        if(num == 0)
            return;
        else
            recursivePrint(++num);
    }

}

Консольный выход

Number: 1
Number: 2
.
.
.
Number: 8645
Number: 8646
Number: 8647Exception in thread "main" java.lang.StackOverflowError
    at java.io.FileOutputStream.write(Unknown Source)
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
    at java.io.BufferedOutputStream.flush(Unknown Source)
    at java.io.PrintStream.write(Unknown Source)
    at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)
    at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source)
    at sun.nio.cs.StreamEncoder.flushBuffer(Unknown Source)
    at java.io.OutputStreamWriter.flushBuffer(Unknown Source)
    at java.io.PrintStream.newLine(Unknown Source)
    at java.io.PrintStream.println(Unknown Source)
    at demo.StackOverflowErrorExample.recursivePrint(StackOverflowErrorExample.java:11)
    at demo.StackOverflowErrorExample.recursivePrint(StackOverflowErrorExample.java:16)
    .
    .
    .
    at demo.StackOverflowErrorExample.recursivePrint(StackOverflowErrorExample.java:16)

Объяснение

Когда вызов функции вызывается Java-приложением, стек стека выделяется в стеке вызовов. stack frame содержит параметры вызываемого метода, его локальные параметры и обратный адрес метода. Адрес возврата обозначает точку выполнения, из которой выполнение программы должно продолжаться после возврата вызванного метода. Если нет места для нового стека кадров, то StackOverflowError создается виртуальной машиной Java (JVM).

Наиболее распространенным случаем, который может вызывать стек Java-приложения, является рекурсия. В рекурсии метод запускается во время его выполнения. Recursion один из самых мощных методов программирования общего назначения, но его следует использовать с осторожностью, чтобы избежать StackOverflowError.

Ссылки

0
задан JdP 4 March 2019 в 08:33
поделиться