static关键字和static代码块执行顺序

2020-12-03 21:48发布

1.static 使用场景:

  1. 修饰变量
  2. 修饰方法
  3. 可以修饰
  4. 静态导包

import static java.lang.System.out;

import static java.lang.Integer.*;

public class StaticTest {

public static void main(String[] args) {

out.println(MAX_VALUE);

}

}
.static代码块执行顺序 总结一下(父静子静,父非静,父构造,子非静,子构造)(同一类中相同内容的比如静态或者非静态实例的执行顺序都是从上往下依次执行)


package net.csdn.se.statictest;

import net.csdn.se.statictest.Child;

public class Parent {
    static {
        System.out.println("父类的静态块");
    }
    private static String staticStr = getStaticStr();
    private String str = getStr();   //非静态变量成员变量
    {
        System.out.println("父类的实例块");   //非静态代码块
    }
    public Parent() {
        System.out.println("父类的构造方法");
    }
    private static String getStaticStr() {
        System.out.println("父类的静态属性初始化");
        return null;
    }
    private String getStr() {
        System.out.println("父类的实例属性初始化");
        return null;
    }

    public static void main(String[] args) {
        new Child();
    }
}
package net.csdn.se.statictest;

import java.util.HashMap;

public class Child extends Parent {
    static {
        System.out.println("子类的静态块"); //同一个类中,静态内容的执行顺序是由上往下执行的,非静态也是一样的
    }
    private static String staticStr = getStaticStr();

    {
        System.out.println("子类的实例块");
    }
    public Child() {
        System.out.println("子类的构造方法");
    }
    private String str = getStr();
    private static String getStaticStr() {
        System.out.println("子类的静态属性初始化");
        return null;
    }
    private String getStr() {
        System.out.println("子类的实例属性初始化");
        HashMap map = new HashMap();
        map.put("key","value");
        return null;
    }
}

  执行 new Child()的时候回先创建父类,上面代码的执行结果顺序是:

父类的静态块
父类的静态属性初始化
子类的静态属性初始化
子类的静态块
父类的实例属性初始化
父类的实例块
父类的构造方法
子类的实例块
子类的实例属性初始化
子类的构造方法

同一个类中的静态内容的执行顺序是代码从上往下加载

结尾

看完如果对你有帮助,感谢点赞支持!

标签: