2016-01-07 4 views
1

Я новичок в java, я хотел бы понять, когда я разбиваю объект в классе и основной программе. Я получаю это исключение. Исключение из потока «main» java.lang.StackOverflowError при выполнении ниже программы. Может кто-то, пожалуйста, помогите мне понять, почему это происходит в рекурсии?StackOverflowError в java - Recursion

public class Test { 

    Test t = new Test(); 

    public static void main(String arg[]) { 

     Test t = new Test(); 
    } 
} 

ответ

1

Проблема здесь в переменной t.

Если новый Test -объект создается, t инициализируется автоматически - с новым Test -объекта, который по созданию снова создает новый Test -объект. Поэтому каждый вызов конструктора Test приводит к другому вызову конструктора Test. Пока стек не переполнится.

0

Поскольку вы объявляете Test t = new Test(); в самом классе теста, удалите верхнюю часть Test t = new Test(); или измените переменную, а затем попробуйте запустить ее.

2

У вас нет конструктора. Я думаю, что следующее, что вы хотите:

class Test { 
    //constructor method 
    Test() { 
    System.out.println("Constructor method called."); 
    } 

    public static void main(String[] args) { 
    Test t = new Test; //creating object 
    } 
} 

Источник: http://www.programmingsimplified.com/java/tutorial/java-constructor-tutorial

Причина вы получаете переполнение стека, что каждый раз, когда создается экземпляр вашего класса он объявляет переменную экземпляра т, который инициализирован в другой новый экземпляр класса, который приводит к бесконечной рекурсии, так как каждый новый объект создает другой новый объект и т. д.

+0

В java, если вы не объявите конструктор в порядке, конструктор по умолчанию будет включен компилятором. – saljuama

+0

Да, я знаю, но было полезно выводить сообщение, чтобы доказать, что конструктор был вызван, поскольку плакат сказал, что он пытается понять конструкторы. – pabrams

+0

Этот источник, который я цитировал, может быть не лучшим для общих учебных пособий по java. Вероятно, это лучше, хотя пример конструктора не так прост: https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html – pabrams