Java static(三) – 静态代码块

Java static(三) – 静态代码块静态代码块static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内JVM加载类时会执行这些静态代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们每个静态代码块只会被执行一次实例说明//父类publicclassParentStatic{privatestaticStringpstr=”父类静态变量”;static{System.o.

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

  1. 静态代码块
    static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内
    JVM加载类时会执行这些静态代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们
    每个静态代码块只会被执行一次
  2. 实例说明
// 父类
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("执行子类构造方法。。。");
    }
}
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.net/160562.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软件测试 因果图_软件测试因果图

    软件测试 因果图_软件测试因果图因果图是一种形式语言,用自然语言描述的规格说明可以转化为因果图。因果图实际上是一种数字逻辑电路(一个组合的逻辑网络),但没有使用标准的电子学符号,而是使用了稍微简单点的符号,它有助于用一个系统的方法选择出高效的测试用例集,它还有一个额外的好处就是可以指出规格说明的不完整和不明确之处。 生成测试用例采用的过程:将规格说明分解为可执行的片段。这是必须的步骤,因为因果图不善于处理较大的规格说明。 …

    2022年8月14日
    6
  • python 程序员进阶之路:从新手到高手的100个模块

    在知乎和CSDN的圈子里,经常看到、听到一些python初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python学到什么程度可以面试工作?》,真实反映了python程序员在成长过程中的一些困惑。

    2022年4月10日
    53
  • 利用iframe技巧获取訪问者qq

    利用iframe技巧获取訪问者qq

    2021年12月9日
    56
  • python集合_python集合交集

    python集合_python集合交集一、集合1.1:集合的特性集合是无序的,集合中的元素是唯一的,集合一般用于元组或者列表中的元素去重1.2:集合的格式格式1:变量名=set(元素,元素)格式2:变量名={元素,元素…}注意:下面写法为一个空字典,为空默认是字典,如果有数据在根据格式判断为字典还是集合name={}1.3:添加元素方式一:add案例:nums={11,24,45,96,28}nums.add(42)print(nums)#{96,42,

    2025年6月26日
    5
  • dom.querySelector和document.getElementById区别

    dom.querySelector和document.getElementById区别、document.getElementById可以查询纯数字的iddom.querySelectordocument.querySelectorAll(’[id=“111”]’)在某个dom下寻找相应选择器的元素背景产品反馈项目系统模板复制之后,元素无法拖拽。经排查发现元素继承自move组件。而每个元素绑定的id竟然纯数字;复制模板之后由于项目的复杂性无法统一的对复制出…

    2022年7月15日
    15
  • 学员管理系统(完整版附带源码)

    学员管理系统(完整版附带源码)学员管理系统是刚接触python时算是一个比较难的小项目,毕竟第一次接触这样的思维逻辑,不过用心学起来还是很有趣的,发现乐在其中,也就不觉得难了。下面给大家分享一下学员管理系统较为完整的代码1.主程序importsys,datetimestulist=[]stuNumlist=[]userdata={}whileTrue:userInput=showmenu()ifuserInput==”1″:addStu().

    2025年12月11日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号