问答详情
源自:8-10 Java 中的 static 使用之静态初始化块

对静态初始化块和普通初始化块的运行问题。

public class Demo1{
 int a;
 static{
 a=1;
 System.out.println("通过静态初始化块为变量a赋值:"+a);
 }
 public static void main(String[] args){
 }
}
运行结果:
通过静态初始化块为变量a赋值:1
问题:我在main方法里什么都没有声明和调用,系统怎么就可以运行该静态初始化块呢?
public class Demo2{
 int b;
 int c;
 public Demo2{
  b=7;
  System.out.println("通过构造方法为变量b赋值:"+b);
 }
 {
   c=9;
   System.out.println("通过初始化块为变量c赋值:"+c);
 }
 public static void main(Sting[] args){
  Demo2 hello2=new Demo2();
 }
}
运行结果:
通过初始化块为变量c赋值:9
通过构造方法为变量b赋值:7
问题:在main方法中我只调用了构造方法,为什么普通初始化块也会运行呢?从哪里运行的呢?望高手解答,谢谢!


提问者:_Jack_Han_ 2016-01-02 23:17

个回答

  • 产品经理不是经理
    2016-01-02 23:23:49
    已采纳

    静态初始化代码块在 .class字节码加载进内存时,就开始运行了。

    普通初始化块先于构造方法执行。


  • 产品经理不是经理
    2016-01-02 23:25:28

    静态代码块 > 构造代码块 > 构造方法

  • _Jack_Han_
    2016-01-02 23:19:09

    第16行构造方法少写了()