静态常量(static final)的研究
2013-11-05 22:04
295 查看
静态常量由于其编译原理的特殊性有时候比较难理解,下面就分情况举例,相信4个示例能帮大家很好地理解static 和 final关键字的使用。
编译期常量的这种情况,编译器可以将该常量值代入任何可能用到它的计算式中,但不是机械替换。
final如果直接初始化,那么所有的相关值在编译的时候直接赋值,
相当于在Work中直接存在System.out.println("123456"),所以执行的时候并没有调用W,那么静态块也就没有执行。
final如果在声明时没有初始化,那么就不会在编译的时候就不会直接赋值。
当需要调用的时候在执行相应的静态块来获取初始化的值。
下面两个结果一样:都执行静态块,因为都调用了Work
静态块中的方法只有在第一次调用该类的时候执行。(编译的时候不可能调用)
转载请注明文章来源:/article/10041402.html
编译期常量的这种情况,编译器可以将该常量值代入任何可能用到它的计算式中,但不是机械替换。
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
相关文章推荐
- 进程的同步与异步
- HDU 4577X-Boxes(数学规律题目 循环节)
- android 主动推送技术分享
- 算法竞赛入门经典第一章【小结与习题】
- 各大品牌电脑的还原快捷键
- strcat strcpy strcmp strlen 的j简单实现
- Android学习篇章47-VideoView视频播放
- Ajax介绍
- mssql 字增自段怎样重置(重新自增)|清空表已有数据
- Servlet总结
- Java基础之序列化对象——反序列化对象(DeserializeObjects)
- 11款样式新颖的 jQuery/CSS3 网页菜单
- iOS PDF之旅(一)创建PDF文件
- Json.net[v3.5]对对象和JSON字符串的使用
- 浅谈android百度地图开发
- 四件在我步入职业软件开发生涯那天起就该知道的事情
- Ceph配置——6.心跳设置
- 级联删除和更新
- hibernate映射文件
- Java基础之序列化对象——将对象写入到文件中(SerializeObjects)