1. 遇到问题
类的构造方法中调用本类的其他方法,如fun()。
void private fun(){ // do something }
SonarLint 提示:Make “fun” a “static” method.
2. 静态方法与非静态方法的区别
区别 | 静态方法 | 非静态方法 |
---|---|---|
内存区别 | 类定义时装载、分配内存 | 实例化对象,并调用方法时分配内存 |
外部调用区别 | 类名.方法名 | 对象.方法名 |
内部调用区别 | 只能调用静态方法、静态变量,通过实例化对象调用非静态方法、非静态变量 | 无限制 |
3. 类构造方法
引用《java变成思想》原文:
Even though it doesn’t explicitly use the static keyword, the constructor is actually a static method. So the first time an object of type Dog is created, or the first time a static method or static field of class Dog is accessed, the Java interpreter must locate Dog.class, which it does by searching through the classpath.
- 构造方法没有加static,实际上仍然是静态方法。
4.解决问题
回到 sonarLint 告警的问题上来。在构造方法里,调用了本类的私有方法。
构造方法实际上就是静态方法,那么被调用的本类私有方法应该也是static方法。
5.引出问题-1 private static方法是否有必要
为了本类中的其他static方法调用,代码模块化,易读、易理解。该方法不会对所在对象造成任何修改。
JIT内联优化
- 私有的,不能被外部类访问,防止对静态变量的修改。(与public static 的区别)