java 构造方法与静态方法

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 的区别)
5.引出问题-2 构造方法是static方法,为什么可以调用类中成员变量、非静态方法?
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值