2012-06-27 2 views
3
public class testing {  
    testing t=new testing();     

    public static void main(String args[]){ 
     testing t1=new testing(); 
     t1.fun(); 
    } 

    void fun(){   
     int a=2;   
     int b=t.fun2(a); 
     System.out.println(a+" "+b); 
    } 

    int fun2(int a) 
    { 
     a=3; 
     return a; 
    } 
} 

Почему код выше приведен ниже ошибки? Я просто хочу знать причину, потому что в этом случае трудно ожидать ошибки StackOverFlowError.Ошибка stackoverflow в следующей программе java

Exception in thread "main" java.lang.StackOverflowError 
at com.testing.<init>(testing.java:4) 
at com.testing.<init>(testing.java:4) 
+1

Ahh, пожалуйста, отделите свой код. Гораздо проще помочь вам, когда ваш код будет читабельным. –

+1

Кроме того, классы должны быть капитализированы. Ознакомьтесь с некоторыми правилами стиля кода. –

+1

@ jack57 Я знаю правила кодирования, просто написал код для быстрого тестирования. Но спасибо за совет в любом случае. – user980089

ответ

13

Вы рекурсивно создания экземпляра testing

public class testing {  
testing t=new testing();   
// 

} 

При создании первого экземпляра он будет создавать новый экземпляр по testing t=new testing(); который снова будет создавать новый экземпляр и так далее

+1

Я создал объект для тестирования класса, и, по моему мнению, он будет создан только один раз. Можете ли вы объяснить, как создаются несколько экземпляров? – user980089

+1

При создании первого экземпляра он создаст новый экземпляр «test t = new testing();», который снова создаст новый экземпляр и т. Д. –

+1

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

1

попробовать это решение,

public class testing {     

    public static void main(String args[]){ 
     testing t1=new testing(); 
     t1.fun(t1); 
    } 

    void fun(testing t1){   
     int a=2;   
     int b=t1.fun2(a); 
     System.out.println(a+" "+b); 
    } 

    int fun2(int a) 
    { 
     a=3; 
     return a; 
    } 
} 
+0

thanx kushan для решения, но я просто хочу знать причину ошибки. – user980089

+0

@Jigar Joshi объясняет ошибку – Kushan

1

Вы должны создать f ield на уровне класса, но создайте экземпляр один раз там, где в основном

public class Testing {  
    static Testing t1;    

    public static void main(String args[]){ 
     t1=new Testing(); 
     t1.fun(); 
    } 

    void fun(){   
     int a=2;   
     int b=t1.fun2(a); 
     System.out.println(a+" "+b); 
    } 

    int fun2(int a) 
    { 
     a=3; 
     return a; 
    } 
} 
+0

некоторые альтернативные решения также существуют, которые могут ускользнуть от этой проблемы – RTA

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