final稱為常量,static final稱為全局常量。
成員變量是隨類初始化或?qū)ο蟪跏蓟跏蓟摹.?dāng)類初始化的時(shí)候,會(huì)給類變量分配內(nèi)存;當(dāng)對(duì)象初始化的時(shí)候,會(huì)給實(shí)例變量分配內(nèi)存。
final修飾成員變量可以在申明的時(shí)候指定初始值,還可以在構(gòu)造器或者在普通初始化塊中指定初始值。
static final修飾的變量可以在申明的時(shí)候指定初始值,也可以在靜態(tài)初始化塊中指定初始值。
由此可以看出final修飾的成員變量的值可以在同一類的不同對(duì)象中改變,而static final修飾的成員變量在同一類不同對(duì)象中不能改變。
例子:
public class FinalDemo {
private static final String A;
private static final String A1 = "static final直接賦值";
private final String B;
private final String B1 = "final直接賦值";
static {
A= "靜態(tài)初始化塊初始化";
}
// {
// B= "初始化塊初始化";
// }
public FinalDemo(String b) {
B = b;
}
public static void main(String[] args) {
FinalDemo demo1 = new FinalDemo("構(gòu)造方法初始化demo1");
System.out.println(demo1.B);
FinalDemo demo2 = new FinalDemo("構(gòu)造方法初始化demo2");
System.out.println(demo2.B);
System.out.println(FinalDemo.A);
System.out.println(FinalDemo.A1);
}
}
運(yùn)行結(jié)果:
構(gòu)造方法初始化demo1
構(gòu)造方法初始化demo2
靜態(tài)初始化塊初始化
static final直接賦值