Java中static块执行时机

Java中static块执行时机在使用static进行初始化的操作,怎么也执行不了!代码如下:public class StaticDemo { public static final String INIT = "init"; static { System.out.println("——StaticDemo—-"); }}…

大家好,又见面了,我是全栈君。

Java中static块执行时机

演示例子

在使用static进行初始化的操作,怎么也执行不了!代码如下:

public class StaticDemo { 
   

    public static final String INIT = "init";
    static {
        System.out.println("------StaticDemo----");
    }
}

public class TestStatic { 
   

    public static void main(String[] args) {
        System.out.println(StaticDemo.INIT);
    }
}
//打印
init

怎么没有执行 static 块的代码呢?

最后发现是因为调用的静态属性被final修饰导致的。去掉final修饰,结果OK!

public class StaticDemo {

    //去掉 final
    public static String INIT = "init";
    static {
        System.out.println("------StaticDemo----");
    }
}

public class TestStatic {

    public static void main(String[] args) {
        System.out.println(StaticDemo.INIT);
    }
}
//打印结果
------StaticDemo----
init

这里就和类加载机制中的 初始化 相关!==类被加载了不一定就会执行静态代码块,只有一个类被主动使用的时候,静态代码才会被执行!==

 当一个类被主动使用时,Java虚拟就会对其初始化,如下六种情况为主动使用:

  1. 当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)
  2. 当调用某个类的静态方法时
  3. 当使用某个类或接口的静态字段时
  4. 当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时
  5. 当初始化某个子类时
  6. 当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类)

    Java编译器会收集所有的类变量初始化语句和类型的静态初始化器,将这些放到一个特殊的方法中:clinit。

重点:使用final修饰的静态字段,在调用的时候不会对类进行初始化!

更多相关内容阅读

java中静态代码块的用法 static用法详解

java]static关键字的四种用法

JAVA静态代码块会在类被加载时自动执行?

java的static块执行时机


如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到,谢谢!

如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页 : http://blog.csdn.net/u010648555

© 每天都在变得更好的阿飞


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • Excel VBA宏编程入门(五)——用户交互[通俗易懂]

    Excel VBA宏编程入门(五)——用户交互[通俗易懂]目录任务介绍选择文件夹选择文件保存路径交互选择一列交互选择一行任务介绍VBA编程中,为了程序的灵活性,有时候需要用到用户交互操作,例如让用户选择一个文件夹,用户选择一个单元格等等。本文将介绍一些常用的用户交互操作的实现选择文件夹St=Application.FileDialog(msoFileDialogFolderPicker).Show’如果选择了文件夹就返回-1,不选择文件夹就返回0IfSt<>0ThenfileDir=Application.File

    2022年6月2日
    37
  • java跨域访问四种方式_java如何解决跨域问题

    java跨域访问四种方式_java如何解决跨域问题什么是跨域问题出于安全考虑,对于Ajax请求,浏览器会发起同源检查。所谓的同源是指发出请求的网页与请求的服务器对应的通讯协议、域名、端口完全一致。如果发起请求的网页和Ajax请求的目标地址不同源就会出现所谓的跨域问题而无法正确访问。跨域问题的解决方案Cross(跨域资源共享方案)CORS是一个W3C标准,全称是”跨域资源共享”(Cross-originresourcesharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。具.

    2022年8月24日
    6
  • Kolmogorov–Smirnov test(K-S检验)「建议收藏」

    Kolmogorov–Smirnov test(K-S检验)「建议收藏」主要参考资料:(1)https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test(2)https://wenku.baidu.com/view/ccfa573a3968011ca30091d6.htmlKolmogorov–Smirnovstatistic累计分布函数:其中I[−inf,x]I[−inf…

    2022年10月18日
    3
  • python开发h5页面_大数据和python有关吗

    python开发h5页面_大数据和python有关吗文章目录前言HDF与h5简介数据组织方式HDFView下载与安装在WIN10系统安装后打开出现黑框闪退的解决方法python对h5文件的操作批量制作h5文件h5文件的提取,另存为nii文件前言一般来说,深度学习的训练数据和训练后的参数都会保存为h5格式文件,对于训练数据来说,深度学习中当训练大量数据时,如果从硬盘中加载再预处理,再传递进网络,这是一个非常耗时的过程。其中从硬盘中读取图片会花费大量时间,更可行在方法是将其存在单个文件中,如h5文件。那么h5文件对于深度学习训练具有什么优势呢?可以支持

    2025年9月12日
    7
  • PyCharm – Show History (历史版本回滚)

    PyCharm – Show History (历史版本回滚)PyCharm ShowHistory 历史版本回滚

    2025年11月29日
    4
  • WinRM横向移动

    WinRM横向移动https blog csdn net SheXinK article details

    2025年11月7日
    4

发表回复

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

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