经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
类成员变量的初始化
来源:cnblogs  作者:certainTao  时间:2021/4/6 10:21:30  对本文有异议

1-1 类成员变量初始化的分类

类成员变量的初始化可简单分为两类:非静态成员变量的初始化(以下简称“普通初始化”)和静态成员变量的初始化(“静态初始化”)。

 

1-2 与初始化相关的规律

  1. 构造函数实际上也是静态方法;
  2. 首次创建类对象、访问类的静态成员(变量或方法)会引发类加载; 
  3. 类加载时会触发静态初始化;
  4. 普通初始化会在任何非静态方法(但包括构造函数)被调用前完成;
  5. 静态初始化会在任何方法被调用前完成;
  6. 总结4、5点有:调用除构造函数外静态方法只会引发静态初始化,而不会引发普通初始化。

 

1-3 类成员变量的初始化顺序

  1. 变量(无论是静态成员变量还是非静态成员变量)定义的先后顺序决定了初始化顺序;
  2. 顺序优先级:静态成员变量 = 静态代码块 > 非静态成员变量 = 非静态代码块 > 构造函数

 

1-4 相关案例

  1. class Cup{
  2. Cup(int marker){
  3. System.out.println("Cup("+marker+")");
  4. }
  5. void f1(int marker){
  6. System.out.println("f1("+marker+")");
  7. }
  8. }
  9. class Cups{
  10. static Cup cup1 = new Cup(1);
  11. Cup cup2 = new Cup(2);
  12. {
  13. Cup cup3 = new Cup(3);
  14. }
  15. static{
  16. Cup cup4 = new Cup(4);
  17. }
  18. Cups(){
  19. System.out.println("Cups()");
  20. }
  21. static void f2(int marker){
  22. System.out.println("f2("+marker+")");
  23. }
  24. }
  25. public class ExplicitStatic {
  26. public static void main(String[] args) {
  27. System.out.println("Inside main()");
  28. Cups.f2(5);
  29. // Cups cups = new Cups();
  30. }
  31. }

输出结果为:

  1. Inside main()
  2. Cup(1)
  3. Cup(4)
  4. f2(5)
  5. Process finished with exit code 0

此结果验证了1-2中的规律6:调用除构造函数外静态方法只会引发静态初始化,而不会引发普通初始化。因为类中的普通成员变量cup2、cup3并未被显示初始化。

 

  1. public class ExplicitStatic {
  2. public static void main(String[] args) {
  3. System.out.println("Inside main()");
  4. // Cups.f2(5);
  5. Cups cups = new Cups();
  6. }
  7. }

输出的结果为:

  1. Inside main()
  2. Cup(1)
  3. Cup(4)
  4. Cup(2)
  5. Cup(3)
  6. Cups()
  7. Process finished with exit code 0

此结果验证了1-2中的规律4、5 以及 初始化顺序的优先级。

 

原文链接:http://www.cnblogs.com/certainTao/p/14614203.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号