2017-10-08 1 views
0

Ich weiß, das ist falsch, aber ich will den Grund wissen, warum ichGrund hinter der stackOverflowError-Ausnahme?

class Student{ 

    String student; 
    int rollno; 

    Student stud=new Student("s",20);//(1st object)Thrown exception because of this line 

    Student(String student,int rollno){ 
     this.student=student; 
     this.rollno=rollno; 
     } 


    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Student stud=new Student("R",101); 


    } 

    } 
Exception in thread "main" java.lang.StackOverflowError 
at sai.Student.<init>(Student.java:8) 
at sai.Student.<init>(Student.java:8)......... 

Wenn ich nur ein Objekt erschaffe ich immer (dh erste Objekt) ich diesen Fehler wird nicht erhalten, aber wenn ich zwei Objekt erstellen Ich bin diesen Fehler bekommen.

+0

Sie erstellen keine zwei Objekte. Sie versuchen, eine unbegrenzte Anzahl von Objekten zu erstellen. – Eran

+0

Kannst du bitte erklären, wie es Unendliche Objekte erzeugt? – Swati

Antwort

0

Ein StackOverflowError tritt auf, wenn eine Anwendung zu tief rekursiv wird und der Aufrufstapel sein Limit erreicht. In Ihrem Fall initialisiert das Erstellen einer Instanz von Student alle seine Member, einschließlich stud, das ist ein Student für sich selbst - so initialisiert es alle seine Mitglieder einschließlich seiner stud und so weiter, bis der Fehler auftritt.

0

Wenn ein neues Student-Objekt erstellt wird, werden alle seine Felder initialisiert. Das bedeutet

String Student; int rollno; Student Stud = neuer Student ("s", 20);

alles passieren. Die ersten beiden Anweisungen sind harmlos, aber wenn die dritte Anweisung ausgeführt wird, versucht sie, ein neues Student-Objekt zu erstellen, das zu einer anderen Initialisierung von> String student führt.

int rollno; 
Student stud=new Student("s",20); 

, die wiederum in einer anderen Initialisierung führt und so weiter und weiter, bis Sie Stackoverflow-Fehler

0
Student stud=new Student("R",101); 

1.First über der Linie ausgeführt und dann die folgenden Zeilen ausgeführt bekommen

class Student{ 

String student; 
int rollno; 

Student stud=new Student("s",20); 

2.Da wegen Student Stud = neuer Student ("s", 20) wieder unter den Zeilen wil Ich werde ausgeführt und dieser Prozess wird fortgesetzt, aufgrund dessen wir stackoverflowError Ausnahme erhalten.

Klasse Schüler {

String student; 
int rollno; 

Student stud=new Student("s",20); 

Wenn ich nur ein Objekt (das heißt erstes Objekt) zu schaffen ich wont diesen Fehler Aber wenn ich zwei erstellen Objekt ich diese Störung erhalte.

** ANnswer: ** Da wir

0

Wie @Mureinik bereits erwähnt sind nichts in Haupt-Schreiben so geht Steuerung gewohnt zweiten Schritt,

Student stud=new Student("s",20); 

über die Linie ist der Grund für unendlich Schleife, Ursache, wenn Sie Instanz von Student während der Initialisierung der Elementvariablen Student erstellen, wird es in Endlosschleife. Wie es seine eigenen Objekte schafft.

== == Herausgegeben

Es gibt keinen Punkt Student Typ Variable als Membervariable zu deklarieren, die ich sehen kann. Sie sollten es also aus seiner Elementvariablen entfernen.Der endgültige Code sollte wie folgt aussehen:

class Student{ 

String student; 
int rollno; 

Student(String student,int rollno){ 
    this.student=student; 
    this.rollno=rollno; 
    } 

public static void main(String[] args) { 
Student stud1 = new Student("R",101); 
//use stud instance 

Student stud12 = new Student("V",11); // create another instance 

    } 
} 
+0

privater Student Stud; --- Aufgrund dieser Zeile erhalten wir NullPointerException – Swati

+0

@Swati Nein, Sie werden nicht. Wie Programm beginnt von Hauptmethode und OP bereits Initialisierung Bolzen vor der Verwendung – Ravi

+0

überprüfen Sie bitte, ich habe versucht, es auf IDE Ich bekomme eine NullPointerException – Swati

Verwandte Themen