即使我们使用的是后来定义的常量,这个代码是如何编译的?

Gur*_*lki 4 java

在下面的代码中,DEFAULT_CACHE_SIZE稍后被声明,但它用于在String变量之前为其赋值,因此很奇怪它是如何可能的?

public class Test  { 

public String getName() { 
return this.name; 
} 

public int getCacheSize() { 
return this.cacheSize; 
} 

public synchronized void setCacheSize(int size) {
this.cacheSize = size; 

System.out.println("Cache size now " + this.cacheSize); 
} 

private final String name = "Reginald"; 
private int cacheSize = DEFAULT_CACHE_SIZE; 
private static final int DEFAULT_CACHE_SIZE = 200; 
}
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 8

来自Sun docs:

static修饰符与final修饰符结合使用,也用于定义常量.最终修饰符表示此字段的值不能更改.

如果将基本类型或字符串定义为常量并且在编译时已知该值,则编译器会将代码中的常量名称替换为其值.这称为编译时常量

在你的代码中DEFAULT_CACHE_SIZE是一个编译时常量.