2013-05-01 19 views
5

Jestem całkowicie nowy w Javie i zastanawiam się, dlaczego mój blok statyczny nie jest wykonywany.Statyczne bloki - kiedy są wykonywane

public class Main { 

public static void main(String[] args) { 
    Account firstAccount = new Account(); 
    firstAccount.balance = 100; 
    Account.global = 200; 
    System.out.println("My Balance is : " + firstAccount.balance); 
    System.out.println("Global data : " + Account.global); 

    System.out.println("*******************"); 
    Account secondAccount = new Account(); 
    System.out.println("Second account balance :" + secondAccount.balance); 
    System.out.println("Second account global :" + Account.global); 

    Account.global=300; 
    System.out.println("Second account global :" + Account.global); 

    Account.add(); } 
} 

public class Account 
{ 
int balance;   
static int global; 

void display() 
{ 
System.out.println("Balance  : " + balance); 
System.out.println("Global data : " + global); 
} 

static // static block 
{ 
    System.out.println("Good Morning Michelle"); 

} 
static void add() 
{ 
    System.out.println("Result of 2 + 3 " + (2+3)); 
    System.out.println("Result of 2+3/4 " + (2+3/4)); 
} 
public Account() { 
    super(); 
    System.out.println("Constructor"); 

} 
} 

moje wyjście jest:

Good Morning Michelle 
Constructor 
My Balance is : 100 
Global data : 200 
******************* 
Constructor 
Second account balance :0 
Second account global :200 
Second account global :300 
Result of 2 + 3 5 
Result of 2+3/4 2 

Chcę wiedzieć dlaczego „Good Morning Michelle” nie została wyświetlona, ​​kiedy wszedł z drugiego rachunku.

Z przeprowadzonych przeze mnie badań ten blok statyczny powinien zostać wykonany za każdym razem, gdy zostanie wywołana klasa (nowe konto).

Przepraszamy za prawdziwe pytanie dla początkujących. Michelle

+2

Blok statyczny wykonuje się jeden raz, wraz z inicjalizacją pól statycznych w klasie. – nhahtdh

+0

Usunięcie słowa "static" spowoduje zmianę go na zwykły blok inicjalizatora, który byłby wykonywany za każdym razem, gdy tworzone jest nowe wystąpienie klasy. –

+0

Spójrz na powiązane pytania, jest mnóstwo informacji na ten temat. –

Odpowiedz

8

Twój statyczny blok, który drukuje "Good Morning Michelle", to static initializer. Są one uruchamiane tylko raz dla każdej klasy, kiedy pierwsza klasa jest przywoływana. Utworzenie drugiej instancji klasy nie spowoduje jej ponownego uruchomienia.

+0

Dziękuję bardzo za oczyszczenie tego dla mnie. – Michelle

2

Bloki statyczne są wykonywane przy pierwszym załadowaniu klasy. Dlatego właśnie widzisz dane wyjściowe raz. Sprawdź więcej szczegółów tutaj: Understanding static blocks

Powiązane problemy