2013-05-01 29 views
5

我对Java完全陌生,我想知道为什么我的静态块没有执行。静态块 - 他们什么时候执行

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"); 

} 
} 

我的输出是:

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 

我想知道为什么,当我去与第二帐户未显示“早安米歇尔”。

从我所做的研究中,这个静态块应该在每次调用类时执行(新帐户)。

对不起,真正的初学者问题。 Michelle

+2

静态块会执行一次,以及类中静态字段的初始化。 – nhahtdh 2013-05-01 19:26:29

+0

删除单词“static”会将其更改为普通的初始化程序块,每次创建该类的新实例时都会执行该初始化程序块。 – 2013-05-01 19:46:23

+0

看看相关的问题,有很多关于这方面的信息。 – 2013-05-01 19:47:01

回答

8

您打印“Good Morning Michelle”的静态块是static initializer。每班只有一次,当这个班首次被引用时,它们只运行一次。创建该类的第二个实例不会导致它再次运行。

+0

非常感谢您为我解决这个问题。 – Michelle 2013-05-01 19:51:06

相关问题