2017-02-15 99 views
-3

我被困在一個problem.There之前執行三類 1.Teacher 2.TeacherEx 3.TeacherClass靜態塊不構造

我做教師類的靜態對象public static Teacher t 當我我在TeacherClass中製作TeacherEx的4個對象,TeacherEx中的靜態塊只執行一次,而它必須執行4次。 任何人都可以解釋我究竟是什麼問題?

發佈所有3類 教師類的類的

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

沒有問題。當類最初被加載時,靜態塊被執行,只發生一次。如果你想讓代碼在對象實例上執行,把它放在構造函數中。 –

+2

或者換句話說......問題是1)你不明白靜態和靜態初始化是如何工作的,2)你可能根本不應該在這裏使用'static'。 –

+0

我知道靜態的概念。我試着用靜態的所有可能的東西 –

回答

1

靜態成員不是實例成員。這意味着它們附加(綁定)到類本身而不是類的實例。這裏有TeacherEx類的4個實例,但這對靜態成員無關緊要。即使您沒有任何課程實例,您也可以訪問static成員。

試一試:當類是由JVM在運行時被初始化

public static void main(String[] args) { 

    println(TeacherEx.t.toString()); 

} 

靜態塊將被執行。另一方面,當運行時正在執行實例(new TeacherEx(...))時,將調用構造函數。

+0

非常感謝@Nader Hadji Ghanbari –