</p> 这琅缦沔到净有AppConst什么事,所以你即使改削了AppConst的相关常量,令STR_CONST_1 = "NotString1",SomeService可能依然会打印"String1",因为SomeService的代码没有任何改削,在增量编译的情形下,它的class文件不会被年夜头编译。
, ]& r3 w# f# e1 w 年夜白了膳缦沔这些,年夜致就知道怎么办了,我的体例有两个:6 K7 k& z' j$ V2 R- R4 o4 t
1. 原始前提下,删除class文件后手动重编译。
6 a* \' B1 |7 M8 ^! q5 T 2. 使用IDE的时辰, 先对SomeService做一个细微改削并保留(会自动编译),然后再改削回来并保留(再次自动编译)。如斯class文件就会被更新了。! U" z+ ?, W/ ], w u
声名:这就是为什么要把全数的.class文件删除失踪了。2 R9 U- u* t& h7 J. {
填补:5 {( q0 h% }9 @" G9 ?% }7 y
改成
. W1 m2 G+ B* z; h 1. public class AppConst {6 f7 ~0 @- B. P2 O; ~0 D
2.9 \5 f+ D4 ]) ~+ a1 H: j' p
3.: V& t5 Z$ q3 {' r: y% x
public static getString2(){
! [# ~) ?, ?$ I6 d' w. H* i8 m return "String2";
' [/ y% `5 i: k( F) g }
# h3 ?7 j7 o6 ~ 4. ......
$ u& h* H$ T! t, |% _- A( V 5. }
( v3 _* Z* m1 A$ f! k* {5 u( Y 就可以仅仅改削并编译一个类就行了 h6 [# R- `8 L! L. R" `$ |6 v
年夜根柢上来解决此问题得这么做,最简单。
7 D! M6 M7 \1 \0 F# m# g public class AppConst {
3 i; h; M q, O( B. b public static final String STR_CONST_1 = new String("String1");. i9 U7 n' C) C3 L4 T
public static final String STR_CONST_2 = new String("String2");/ Z6 ]9 ~5 U4 _; R: b
public static final int number1=new Integer(123);$ Z2 _: {0 K5 q8 e" t. r
......# D6 g/ r+ ^& N+ Z0 M3 w
} K( Q( J D v/ G$ F- {
反编译,你会发此刻引用此静态类属性的时辰,引用代码不是直接器具体值替代,而仍是源代码里的引用。
0 B! n# ?( }- f2 u' M# J 一句话总结,在静态类里界说的静态属性,果断不用引用类型,而需要用对象类型。2 ~- \2 ?2 b* q8 {" Q4 i% ?
结论:
5 z- K5 d4 K( U8 c3 [" c6 e 解决这种问题总共有三种体例:
; G5 z! G4 i) _6 z/ O* `7 Y 1、将全数的CLASS文件删除失踪再编译* [, h% H G% f& U$ E. v
2、将其酿成GET、SET体例
: T5 H# L( e( T/ m& z9 A8 I 3、设置核对象引用的体例措置! |