2012-02-03 5 views
1

Приведенный ниже код показывает ошибку Stackoverflow при запуске. Но если я создаю еще один класс CarChange для создания объектов Car, он работает успешно. Я начинаю, делая этот код, чтобы понять важность повышения в java.Ошибка Stackoverflow

public class Car { 

    int i; 
    Car[] c=new Car[2]; 

    Car() { 
     c[0] = new Polo(); 
     i=0; 
    } 



    void drive(){ 
     c[i].testdrive(); //the overloaded method in subclasses polo and swift 
    } 

    void change() { 
     if(i==0) { 
      i++; 
      c[i] = new Swift(); 
     } 
    } 

    public void testdrive() { 
     //overloaded method in subclasses polo and swift 
     System.out.println(" test drive car"); 
    } 



//class Tester { 
    //main 
    Car c= new Car(); 
    c.drive(); 
    c.change(); 
    c.drive(); 
+3

Использование моего ESP Я собираюсь угадать, что 'Polo' является подклассом' Car' и рекурсивно вызывает конструктор 'Car' –

+5

http://en.wikipedia.org/wiki/Indent_style –

+3

Для лучшего помогите раньше, опубликуйте [SSCCE] (http://sscce.org/). И, пожалуйста, используйте последовательную и логичную форму отступов кода. –

ответ

2

Переток stackoverflow означает, что у вас есть бесконечный цикл.

Причина, по которой вы получаете это, состоит в том, что вы вызываете диск из метода testdrive и в этом методе вы снова вызываете диск.

+0

Я отредактировал его, мне очень жаль, что код не был ясен, но testdrive() не вызывает drive() в своем теле метода - – coderaider

+0

имеет ошибку что-нибудь делать с созданием объектов класса в самом классе (вне основного метода), я раньше не видел такого примера, является ли он законным .. заблаговременно – coderaider

+0

Я думаю, что у Брайана Роуча есть ответ, который вы ищете для: Polo является подклассом вашего автомобиля, а конструктор по умолчанию снова создаст новый экземпляр Polo.(поскольку он вызывает конструктора Car каждый раз, когда создается новый экземпляр) –

2

Похоже, что у вас может быть бесконечная рекурсия.

drive() называет testdrive() который class drive() который называет testdriver() ... навсегда, или пока вы бежите из памяти, следовательно, ваша ошибка переполнения стека.

+0

Я его отредактировал, мне жаль, что код не был ясен, но testdrive() не вызывает диск() в его методе тело – coderaider

+0

имеет ошибку, связанную с созданием объектов класса в самом классе (вне основного метода), я раньше не видел такого примера, является ли он законным .. заблаговременно – coderaider

4
Car() { 
    c[0] = new Polo(); 
    i=0; 
} 

Как Polo является подклассом Car() - оно должно быть, чтобы поместиться в автомобиль [] - это будет вызывать конструктор автомобиля «s, когда строится сама. Конструктор пытается создать новый Polo().

Как Polo является подклассом Car() - оно должно быть, чтобы поместиться в автомобиль [] - это будет вызывать конструктор автомобиля «s, когда строится сама. Конструктор пытается создать новый Polo().

Как Polo является подклассом Car() - оно должно быть, чтобы поместиться в автомобиль [] - это будет вызывать конструктор автомобиля «s, когда строится сама. Конструктор пытается создать новый Polo().

... вы получаете изображение?

+0

да, спасибо за подробное объяснение этого – coderaider

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