关于含static关键词的代码调用顺序

来源:互联网 发布:新中新dkq a16d软件 编辑:程序博客网 时间:2024/05/24 01:56

首先我们构造一个类:

public class StaticTest {    public static int k(){ System.out.println("静态成员初始化");return 1;};    public static int m(){ System.out.println("普通成员初始化");return 1;};    StaticTest() { System.out.println("构造函数执行"); }  //构造方法    static int a = k();//静态成员    int b = m();//普通成员    { System.out.println("普通代码块执行"); }  //普通代码块    static{ System.out.println("静态代码块执行"); }  //静态代码块    static void f(){ System.out.println("静态方法执行"); }  //静态方法    void g(){ System.out.println("普通方法执行"); }  //普通方法    public static void main(String[] args){        StaticTest s = new StaticTest();        f();    }}

我们将主函数中代码注释掉的情况下,程序的输出是:

D:\java\jdk1.8.0_131\bin\java...静态成员初始化静态代码块执行Process finished with exit code 0

如果交换静态成员和静态代码块的位置,那么输出结果的顺序也会交换

当我们在主函数中只是new对象时,程序输出:

D:\java\jdk1.8.0_131\bin\java...静态成员初始化静态代码块执行普通成员初始化普通代码块执行构造函数执行Process finished with exit code 0

如果我们在主函数中只调用f()方法,则程序输出:

D:\java\jdk1.8.0_131\bin\java...静态成员初始化静态代码块执行静态方法执行Process finished with exit code 0

同样,如果将普通代码块和普通成员调换位置,它们的输出也会相应的改变,也就是说它们处于同一级。


通过以上代码程序的结果对于类中代码的执行顺序有以下结论

  1. 静态成员、静态代码块(谁前谁先执行)
  2. 普通成员、普通代码块(同上)
  3. 构造方法
  4. 一般方法则在调用时执行

如果存在多继承的情况下,则按照1、2、3的顺序从父类到子类依次执行。

个人总结,有问题还望纠正…
原创粉丝点击