2017-02-15 1 views
-3

ich in einem problem.There stecke sind drei Klassen 1.Teacher 2.TeacherEx 3.TeacherClassStatic Block wird nicht vor dem Konstruktor ausgeführt

ich ein statisches Objekt der Lehrer Klasse mache public static Teacher t Wenn i mache 4 Objekte von TeacherEx in TeacherClass der statische Block in TeacherEx wird nur einmal ausgeführt, während es 4 mal ausgeführt werden muss. Kann mir jemand erklären, was genau das Problem ist?

Posting alle 3 Klassen Lehrer Klasse

public class Teacher { 
    public static String name; 
    public static String subject; 
    public static int nolec; 
} 

public static class TeacherEx { 

public int noStd; 
public String place; 
public static Teacher t; 


public TeacherEx(int no, String p) 
{ 
    noStd=no; 
    place=p; 

    t.name="prashantha"; 
    t.subject="Java_classes"; 
    t.nolec++; 

    System.out.println("The nos of lec after creation class are "+t.nolec); 

} 


static{ 

    if(t==null) 
    { 
     t=new Teacher(); 
    } 
    else 
    { 
     System.out.println("Nothing"); 
    } 

    System.out.println("The nos of lec before this class creation are "+t.nolec); 
} 

} 


public class TeacherClass { 

public static void main(String[] args) 
{ 

    TeacherEx a=new TeacherEx(45,"banglore"); 

    TeacherEx b=new TeacherEx(75,"Mumbai"); 


    TeacherEx c=new TeacherEx(49,"chennai"); 

    TeacherEx d=new TeacherEx(47,"Newyork"); 

} 

} 
+6

Es gibt kein Problem. Der statische Block wird beim ersten Laden der Klasse ausgeführt, was nur einmal vorkommt. Wenn Sie möchten, dass Code bei der Objektinstanziierung ausgeführt wird, fügen Sie ihn in den Konstruktor ein. –

+2

Oder ... um es anders auszudrücken ... das Problem ist 1) Du verstehst nicht, wie Statik und statische Initialisierung funktionieren, und 2) Du solltest hier wahrscheinlich kein 'Static' verwenden. –

+0

Ich kenne statische Konzepte. Ich habe versucht, alle möglichen Dinge mit statischen –

Antwort

1

Statische Elemente einer Klasse sind nicht Instanz Mitglieder. Das bedeutet, dass sie an die Klasse selbst gebunden sind und nicht an die Instanzen der Klasse. Hier haben Sie 4 Instanzen der TeacherEx Klasse, aber das ist nicht wichtig für die statischen Mitglieder. Sie können auf static Mitglieder zugreifen, auch wenn Sie keine Instanzen der Klasse haben.

Probieren Sie es selbst:

public static void main(String[] args) { 

    println(TeacherEx.t.toString()); 

} 

Statische Blöcke ausgeführt werden, wenn die Klasse in der Laufzeit von der JVM wird initialisiert. Konstruktoren hingegen werden aufgerufen, wenn zur Laufzeit eine aktuelle Instanziierung() ausgeführt wird.

+0

Vielen Dank @Nader Hadji Ghanbari –

Verwandte Themen