您的位置:首页 > 其它

静态常量(static final)的研究

2013-11-05 22:04 295 查看
静态常量由于其编译原理的特殊性有时候比较难理解,下面就分情况举例,相信4个示例能帮大家很好地理解static 和 final关键字的使用。

编译期常量的这种情况,编译器可以将该常量值代入任何可能用到它的计算式中,但不是机械替换。

final如果直接初始化,那么所有的相关值在编译的时候直接赋值,

相当于在Work中直接存在System.out.println("123456"),所以执行的时候并没有调用W,那么静态块也就没有执行。

public class Work {
public static void main(String[] args) {
System.out.println(W.s);
}
}
class W{
public static final String s = "123456";
static {
System.out.println("执行了静态块");
}
}


final如果在声明时没有初始化,那么就不会在编译的时候就不会直接赋值。

当需要调用的时候在执行相应的静态块来获取初始化的值。

public class Work {
public static void main(String[] args) {
System.out.println(W.s);
}
}
class W{
public static final String s;
static {
s = "123456";
System.out.println("执行了静态块");
}
}


下面两个结果一样:都执行静态块,因为都调用了Work

public class Work {
public static void main(String[] args) {
System.out.println(Work.s);
}
//正常
public static final String s = "123";
static {
System.out.println("执行了静态块");
}
}


public class Work {
public static void main(String[] args) {
System.out.println(Work.s);
}
//正常
public static final String s;
static {
s = "123";
System.out.println("执行了静态块");
}
}


静态块中的方法只有在第一次调用该类的时候执行。(编译的时候不可能调用)

转载请注明文章来源:/article/10041402.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: