永发信息网

java 中的编译期常量是什么?使用它又什么风险

答案:2  悬赏:70  手机版
解决时间 2021-02-07 06:52
  • 提问者网友:原来太熟悉了会陌生
  • 2021-02-06 06:37
java 中的编译期常量是什么?使用它又什么风险
最佳答案
  • 五星知识达人网友:刀戟声无边
  • 2021-02-06 08:07
编译期常量就是所谓的 public final static 常量。
由于在编译时就确定了值,在使用的场合会直接写成值。而不是直接到原来的类中读取。
这样会有一个问题。 如果 类 A 提供了常量 类B使用了常量。并都进行了编译。
然后,修改了类A的源码,调用系统进行编译。
系统发现类A是新的代码,编译了,类B是旧的代码,就不进行编译,使用旧的类。
由于类B中直接编译进了旧的值,导致类A的修改无法反映到类B中。
这样造成了风险。
全部回答
  • 1楼网友:鸠书
  • 2021-02-06 08:40
遇到的问题是想重新编译某个java文件(比如a.java),里面有个常量(比如finalinta)和上次编译时不一样,但是另一个使用a.class的a的文件(比如b.java)由于在javac在上次编译的时候将当时的a.class里面的常量直接给内联了,所以就达不到想要的效果。 如果是这样的话,对于string可以使用.intern()来防止编译器进行优化,对于其他类型,可以要么不定义为常量,要么将常量定义为private,然后使用一个static方法来返回这个常量。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯