关于java静态代码块的详细运行过程问题

class Chinese
{
private static int count =0; static
{
count =2;
System.out.println("static code");
} private Chinese()
{
System.out.println(++count);
}static void sing()
{
System.out.println("啊!");
}
void singOurCountry()
{
System.out.println(country);
}
}class TestChinese
{
public static void main(String [] args)
{ System.out.println("begin");
Chinese.sing();
System.out.println("end");
new Chinese().sing();
new Chinese().singOurCountry();
new Chinese(); }}此段代码的运行结果为:beginstatic code啊!end3啊!4中国5 不明白为什么运行到Chinese.sing();时输出了static code望高手指点啊····

废话,静态块先执行,类加载的时候就执行,一个类要想运行,首先被Java虚拟机将class文件内部字节码指令读取至内存并且包装成一个Class类型的对象,这个过程称为类加载,Class类的一个对象是对某一个类的一个描述!

不是说运行到Chinese.sing();时输出了static code,Chinese.sing();是什么?是方法调用,Chinese是类,sing是该类的静态方法,你要想调用sing方法,首先第一步就是类加载,类都没加载,Java虚拟机都不认识他,运行个屁呀!

所以第一步是类加载,注意!static块,也就是静态块,在类加载的时候就执行了,而且只执行一次,因为不可能进行第二次类加载,从这个意义上说,静态的成员是第一时间执行的,然后才轮到别人!
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-25

static 块仅在该类被加载时执行一次

class UseStatic {   
       static int a = 3;   
       static int b;   
       static void meth(int x) {   
           System.out.println("x = " + x);  
           System.out.println("a = " + a);  
           System.out.println("b = " + b);   
     }   
      static {   
         System.out.println("Static block initialized.");
         b = a * 4;   
      }   
     public static void main(String args[]){   
          meth(42);   
   }   
}

一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 或12。然后调用main(),main() 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。   注意:在一个static 方法中引用任何实例变量都是非法的。 

下面是该程序的输出:  

Static block initialized.   

x = 42   

a = 3   

b = 12

第2个回答  2013-08-22
静态块在实例化类 自动调用 而不要自己写代码调用 同时他只调用一次
当没有在实例化的时候 只要你调用任何静态方法 或者是静态的属性 都会自动调用静态块、
调用的机制也是一样 只调用一次 在调用静态的任何对象之前调用
第3个回答  2013-08-22
static
{
count =2;
System.out.println("static code");
}
这是首先执行啊!没写方法名,就像在一条分叉路口,不管你选择哪条路(方法)你总要在分叉口经过吧!
相似回答