场景描述:
在开发过程中,由于每个人的编码习惯和风格不同,而项目平时又不经常进行代码优化,久而久之会使项目代码存在诸多问题。鉴于此公司近来使用SonarQube对公司项目的所有工程进行了代码质量扫描,由此,发现了诸多问题。
源码展示:
SonarQube扫描结果
问题描述
从非静态方法正确地更新静态字段非常困难,如果有多个类实例和/或多个线程在运行,则很容易导致错误。理想情况下,静态字段只能从同步的静态方法中更新。
每当从非静态方法更新静态字段时,此规则都会引发问题。
源码知识点汇总
1、注解@PostConstruct使用规范及其特点 @PostConstruct使用详解
2、jvm类加载时机
源码加载分析
首先,JVM在加载阶段通过类的全路径找到该类并把类的信息加载到JVM的方法区,然后在堆区实例化有关java.lang.Class对象,作为方法区中这个类的信息的入口;然后在连接阶段,为类的静态变量logClinet分配内存并赋予JVM默认初始值null;因为注解@PostConstruct的缘故,在类初始化之前会先加载该使用该注解的方法;然后再执行类的初始化。
注:
构造方法 ——> @Autowired —— > @PostConstruct ——> 静态方法 (按此顺序加载)
网友评论