public static final 的坑

今天由于基础知识的问题,踩到一个坑。

我编写了一个mqttclient.jar,提供给第三方系统接入使用,mqttclient.jar内部使用了public static final的常量,当第三方需要的时候,传入。

 

第三方也是将他们编写的程序打成了jar包来执行,会引用我提供的mqttclient.jar

因为我后期程序变更,修改了jar包中的一个常量,但没有告知第三方开发人员,觉得不会有影响,便直接把最新的jar给出,

此时第三方直接将新的mqttclient.jar覆盖原来的,并没有重新打包他们的程序,

所以第三方的程序中的常量还是保持了原来的常量值,与此时jar包内部的不一致,导致问题的发生。

 

static主要作用是在类刚加载时就初始化该量的值并给他分配一块共用的内存块存储他的值.

 

自己写了一个demo复现了以上过程:

1.  模拟第三方,编写程序,调用mqttclient.jar中的常量:

161127_oLeq_3709135.png

public static void main(String[] args) throws Exception {
    System.out.println("我是mqttclient.jar中的常量:" + MqttClient.REQTYPE_INSIGHT);

}

2. 将该简单的main方法工程打包成一个test.jar,部署在服务器执行

161144_r6PH_3709135.png

3. 删除引用的mqttclient.jar,执行test.jar,执行后,常量值仍然是1802

 

4. 反编译test.jar发现:

161308_IKMb_3709135.png

 

5. 去掉final关键字后,编译test.jar,发现:

162541_lJTB_3709135.png

转载于:https://my.oschina.net/u/3709135/blog/1553896

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值