编译的时候哪个先执行?

解决方案 »

  1.   

    给你贴个试验:
    class TestStatic
    {
    static void TestFunction()
    {
    System.out.println("这是一个静态方法!");
    }

    static
    {
    System.out.println("这是一个静态代码块!");
    }

    public static void main(String[] args)
    {
    TestStatic ts = new TestStatic();
    ts.TestFunction();
    }
    }输出结果为:这是一个静态代码块!
    这是一个静态方法!
    这下你该知道那个先执行了吧!
      

  2.   

    public class TestJJ { public static void getPrint() {
    System.out.println("静态代码执行!!!!---------");
    }
    static {
    System.out.println("正在执行静态代码块!!!!--------");
    }

    public static void main(String[] args) {
    //TestJJ.getPrint(); }
    }
    输出:正在执行静态代码块!!!!--------
    可以看出静态代码块,在类加载编译的时候就执行了,
    public class TestJJ { public static void getPrint() {
    System.out.println("静态代码执行!!!!---------");
    }
    static {
    System.out.println("正在执行静态代码块!!!!--------");
    }

    public static void main(String[] args) {
    TestJJ.getPrint(); }
    }
    输出:
    正在执行静态代码块!!!!--------
    静态代码执行!!!!---------
    静态方法在类调用的时候才开始执行,且执行后一直存在内存当中。
    总的来说静态代码块执行先于静态方法,且都是在编译期加载的,楼上存在一定的缺陷!!
      

  3.   

    静态代码快其实就是一个匿名静态函数/方法,由于没有名字,所以无法被外界调用,仅仅在虚拟机加载该类的时候执行一遍,编译过后你会发现这个代码块被命名成了<init>
    而静态方法有名字,只有当被调用的时候才会被执行。
      

  4.   


    package c;public class T3 {

    static void TestFunction() {
    System.out.println("这是一个静态方法!");
    } static {
    System.out.println("这是一个静态代码块!");
    }
    public static void main(String[] args) {  

    }

    }
      

  5.   

     http://topic.csdn.net/u/20080626/10/33fac976-acb6-44cd-9712-25e7e2cce080.html?30394
       去那看看.....