Java static(三) – 静态代码块

2022-09-13 09:35:47 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

  1. 静态代码块 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内 JVM加载类时会执行这些静态代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们 每个静态代码块只会被执行一次
  2. 实例说明
代码语言:javascript复制
// 父类
public class ParentStatic { 
   
    private static String pstr = "父类静态变量";

    static { 
   
        System.out.println("执行父类静态代码块:"   pstr);
    }

    public ParentStatic() { 
   
        System.out.println("执行父类构造方法。。。");
    }
}

// 子类
public class ChildStatic extends ParentStatic { 
   
private static String cstr = "子类静态变量";

    static { 
   
        System.out.println("执行子类静态代码块:"   cstr);
    }

    public ChildStatic() { 
   
        System.out.println("执行子类构造方法。。。");
    }
}
代码语言:javascript复制
public class StaticBlockTest { 
   

    public static void main(String[] args) { 
   
        ChildStatic childStatic1 = new ChildStatic();
        ChildStatic childStatic2 = new ChildStatic();
        System.out.println("类静态代码块只会在加载该类时执行一次。。。");
    }
}

运行结果:

运行过程:

  • 执行ChildStatic childStatic1 = new ChildStatic();先要加载ChildStatic类,加载时发现继承于类ParentStatic,转去加载父类
  • JVM加载父类ParentStatic时,发现父类有静态代码块,便执行父类的静态代码块(父类有父类还会往上找父类静态)
  • 父类ParentStatic加载完成,继续加载子类ChildStatic,发现子类有静态代码块,执行子类静态代码块
  • 类ChildStatic加载完成,执行初始化new ChildStatic(),先调用父类构造函数,在调用子类构造函数
  • 执行ChildStatic childStatic2 = new ChildStatic(),由于此时子类ChildStatic已经加载过了,所以静态代码块不会再执行,直接初始化,调用父类构造函数,再调用子类构造函数

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160562.html原文链接:https://javaforall.cn

0 人点赞