目录

  • Java Static 变量初始化
    • 直接赋值
    • static块初始化
    • 实例方法初始化
      • 解决方案

Java Static 变量初始化

static变量初始化方式

  1. 直接赋值
  2. static块初始化
  3. 实例方法初始化

直接赋值

// 常量字符串
private static final String TEST = "test";// 实例共享的变量
private static int count = 0;

直接赋值是较为常见的静态变量初始化方式,多用于常量。

static块初始化

static int count;
static{count = initCoout();
}private static int initCount() {// count 初始化操作// 返回初始化之后的值return 1;
}

静态代码块初始化适用于逻辑较为复杂的场景,例如从配置文件中获取初始化值。

实例方法初始化

这种情况不多见,而且容易引发静态变量值互相覆盖的问题,也是因此,Sonar扫描会提示:
Makethe enclosing method “static” or remove this set
不要使用非静态方法去更新静态字段,这样很难获得正确的结果,如果有多个类实例和/或多个线程,则很容易导致错误。理想情况下,静态字段仅从同步静态方法中更新。

public class MyClass {private static int count = 0;public void doSomething() {//...count++; // Noncompliant}
}

那现在抛给各位大佬一个问题,现在就是非理想情况下我如何在实例方法中初始化静态变量,而且不引入Sonar扫描问题?

解决方案

  1. 引入静态方法,在静态方法中编写初始化静态变量业务逻辑
  2. 实例方法调用静态方法进行初始化

这两步是为了消除引入Sonar扫描问题,其实是换汤不换药的一个方法。
目前这个问题的核心是防止静态变量被重复初始化,从而导致状态的不统一,引发计算或者业务逻辑的错误。
注意点,这个实例方法也只能调用一次,也即需要开发者保证全局调用一次,其实是可以初始化程序时,调用一次即可。

Java Static 变量初始化相关推荐

  1. java static 变量 初始化一次_关于java static变量初始化的疑问

    java中,类的static变量作为类变量,只需要被一次初始化,就可使用,但是,我在程序中遇到一个问题: 在web.xml中配置listener,服务器启动时,ServletContextListen ...

  2. java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈

    Java 类初始化顺序在网上已经有很多文章了,这里不再谈那么多,仅仅谈下Java静态变量的初始化顺序,如果你是Java高手,并且自认为对这个顺序已经掌握到了炉火纯青的境界,请忽视这篇文章. 前天看了Y ...

  3. java static 变量,和方法从属于类

    第36集 java static 变量,和方法从属于类 可以用类来直接调用static属性和方法 static方法不能调用非静态的属性和方法,反之可以 new产生的对象,不包括static 属性和方法 ...

  4. java static变量何时初始化_Java 静态变量何时初始化?

    小编典典 从请参阅Java静态变量方法: 它是一个属于类而不属于对象(实例)的变量 静态变量在执行开始时仅初始化一次.在初始化任何实例变量之前,将首先初始化这些变量 该类的所有实例共享一个副本 静态变 ...

  5. java中的static变量初始化_Java初始化静态变量的时间顺序

    1. 开始吧! 今天,我们来探讨交流下静态变量初始化过程.Java虚拟机在类加载期间也同样遵循这个过程. 2. 初始化过程 在较高的层次上,JVM执行以下步骤: 首先,加载并链接类.然后,这个过程的& ...

  6. Java实例变量初始化

    原文地址:https://blog.csdn.net/cauchyweierstrass/article/details/48943077 题目是这样的:求下面程序的输出: public class ...

  7. Java成员变量初始化和构造函数顺序

    1.Java虚拟机会将所有的初始化动作手机到<init>()方法中,在分配内存后,就开始调用<init>()方法,其中,成员变量的初始化在构造函数里的初始化动作之前. publ ...

  8. static 变量初始化顺序的问题和解决方案

    http://www.cppblog.com/yindf/archive/2009/03/20/77304.aspx 最近在coding的时候,写了这么一段代码: A.h 1// A.h 2#incl ...

  9. static变量初始化

    1.在C++中,全局static变量和class的static成员变量在main函数之前初始化,main函数之后销毁 2. 函数内部的局部static变量在该函数第一次被调用时初始化,在main函数之 ...

最新文章

  1. Mycat分片规则详解
  2. 修改Hosts为何不生效,是DNS缓存?
  3. Windows Phone访问web service和WCF服务
  4. VS2019配置opencv环境时找不到Microsoft.Cpp.x64.user.props
  5. PyQt4编程之模态与非模态对话框(一)
  6. [译]GLUT教程 - 每秒帧数
  7. [转载]项目风险管理七种武器-霸王枪
  8. dotNet Core 3.1 使用 Elasticsearch
  9. php伪静态后301,动态地址rewrite伪静态,然后301跳转到伪静态时死
  10. silverlight-Canvas中1像素的线变成了2像素
  11. phonegap安装 环境搭建与配置详解(3.4 完整版 提供下载地址)
  12. 网易开源云原生日志系统!
  13. 最雷视频集合贴:优酷啊优酷啊
  14. PS 2022,PR 2018,AE 2017【百度网盘链接,没套路】
  15. 全国2009年1月电子商务与电子政务试题
  16. UMD算法讲义——Lecture 2:算法设计:稳定婚姻问题
  17. 谈EBOM 、PBOM 、MBOM 在PDM中的统一
  18. 运维工程师具备的基本技能
  19. 安卓pdf阅读器_【软件分享】自用的一款PDF阅读器——悦书PDF阅读器,支持护眼模式、注释涂鸦、PDF转换,功能齐全,界面简洁美观。...
  20. 【PS】如何简单的处理带晒伤皮肤的婚纱照?红斑/脱皮/减淡红色

热门文章

  1. 【测控电路】包络检波电路
  2. VS2010/MFC对话框程序调用Windows Media Player播放器控件
  3. 2022年深圳市专精特新中小企业认定标准、材料清单
  4. 用python爬取高考网历年高考分数线将数据放入MySQL并绘制图表
  5. C语言系统内存被踩情况总结
  6. 红米6 红米6A完美刷入开发版获取ROOT超级权限的经验
  7. 数字信号处理——CFAR检测器设计(4)
  8. 网申之后宣讲会有必要去吗?
  9. #榜样的力量#内蒙古自治区互联网医疗服务系统丨数据猿新冠战“疫”公益策划...
  10. AI“文化宴”,易碎的市场寻求新的突破