2015-03-04 7 views
1

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

Вы найдете ниже фрагмент кода

public class ConstructorExample { 

    private ConstructorExample c1 = new ConstructorExample(); 

    public ConstructorExample(){ 
     throw new RuntimeException(); 
    } 

    public static void main(String[] str){ 
     ConstructorExample c = new ConstructorExample(); 
    } 
} 

ответ

2

У вас есть член частный ConstructorExample c1 = новый ConstructorExample(); в классе ConstructorExample.

Когда вы создаете экземпляр экземпляра ConstructorExample, JVM выделяет память для этого ConstructorExample, а затем пытается создать экземпляр первого члена c1. Этот экземпляр начинается с выделения памяти для другого экземпляра ConstructorExample и т. Д.

Кроме того, исключение во время выполнения не имеет значения, поскольку инициализатор элемента выполняется перед конструктором.

0

Его как и ожидалось. Создается создание экземпляра ConstructorExample из основного метода, для которого инициализируется переменная экземпляра перед вызовом конструктора.

private ConstructorExample c1 = new ConstructorExample(); 

Который затем цикл повторяется снова и продолжают выделять все больше и больше памяти, вызывая StackOverflow, даже не завершив полностью создать один экземпляр.

Смежные вопросы