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年7月16日 下午10:16
下一篇 2022年7月16日 下午10:16


相关推荐

  • 虚拟服务器 emule,emule服务器

    虚拟服务器 emule,emule服务器emule服务器内容精选换一换生产站点服务器为SUSE操作系统,对该云服务器创建容灾演练后,发现容灾演练云服务器的网卡名称与生产站点服务器的网卡名称不一致。示例:操作系统为NovellSUSELinuxEnterpriseServer12SP364bit的生产站点服务器,挂载有5张网卡。登录生产站点服务器,查询网卡名称为eth0~eth4,如图1所示。创远程桌面协议(Remote…

    2022年6月15日
    30
  • 2021最新最细致的IDEA集成SVN工具的使用 (入门到精通)

    2021最新最细致的IDEA集成SVN工具的使用 (入门到精通)SVN教程1、SVN常见操作发布项目(shareproject)项目组长将本机项目第一次发布到中央仓库中下载项目(检出项目checkout)组员将中央仓库中的项目第一次下载到本地提交(commit)将本地修改的内容同步到服务器中(本地=>服务器)编写完一个小功能之后、每天下班前一定要及时提交更新(update)将服务器中最新的代码同步到本地(服务器=>本地)编写功能之前,每天上班前一定要及时更新2、SVN安装2.1svn服务端

    2022年10月17日
    5
  • 到底是谁?BCH近期出现大量未知算力

    到底是谁?BCH近期出现大量未知算力到底是谁?BCH近期出现大量未知算力

    2022年4月22日
    46
  • Java对象锁和类锁全面解析(多线程synchronized关键字)

    Java对象锁和类锁全面解析(多线程synchronized关键字)

    2020年11月12日
    232
  • App测试面试题_软件测试算法面试题汇总

    App测试面试题_软件测试算法面试题汇总1.Web端测试和App端测试有何不同(常见)系统结构方面Web项目,b/s架构,基于浏览器的;Web测试只要更新了服务器端,客户端就会同步会更新;App项目,c/s结构的,必须要有客户端;App修改了服务端,则客户端用户所有核心版本都需要进行回归测试一遍;兼容方面Web项目:a.浏览器(火狐、谷歌、IE等)b.操作系统(Windows7、Windows10、Linux等)App项目:a.设备系统:iOS(ipad、iphone)、Android(三星、华为、联想等)、

    2022年8月29日
    9
  • c#操作xml文件

    c#操作xml文件

    2021年9月4日
    89

发表回复

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

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