2017-02-07 7 views
0

Я работаю над следующим сценарием, в котором я создаю экземпляр класса и вызываю метод на этом экземпляре. В результате он дает мне ошибку stackOverFlow. Мой код:вызов метода через экземпляр вызывает ошибку stackOverFlow

public class test { 
    test t = new test(); 
    public void show(){ 
    System.out.println("df"); 
} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    test t = new test(); 
    t.show(); 
} 
+3

Каждый экземпляр 'test' создает новый экземпляр' test' при инициализации. – shmosel

ответ

1

Это бросает StackOverflowException, потому что каждый test имеет линию

test t = new test() 

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

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

-3

Почему вы создаете этот новый экземпляр класса внутри класса? Удалить тест t = новый тест(); внутри класса Test и попробуйте еще раз

+0

Как это написано, это должен быть комментарий. Пожалуйста, прочитайте [ответ]. –

+0

Я нахожусь по телефону, и я не вижу кнопку, чтобы добавить комментарий к его сообщению. Я хотел прокомментировать, но я не нашел кнопку. Я использую приложение Stack Exchange –

+0

У вас нет необходимой репутации, чтобы добавить комментарий еще. Если вы злоупотребляете системой и публикуете комментарии в качестве ответов, вы просто задерживаете достижение требуемой репутации. Вы могли бы написать это как ответ, объяснив, почему произошел StackOverflow (но кто-то еще это сделал). –

1

У вас есть плохой рекурсивный вызов на инстанцировании test экземпляров внутри класса test. Он сохраняет экземпляры новых экземпляров, пока не останется пустое пространство. Когда у вас есть StackOverflowError, первое, что вам нужно проверить, - это то, что в вашем кодовом названии повторяется или нет.

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