JAVA中初始化顺序复习

举报
ShaderJoy 发表于 2021/12/30 00:35:43 2021/12/30
【摘要】 static final、static、final区别 static:静态,全局变量,类的对象共享一个静态变量,只初始化一次。 final:常量,如果是方法则不可覆盖,如果是类不可被继承,必须初始化时设置值,设置后就不能改了 static final:静态常量 初始化顺序如下: 父类静态变量(静态初始化话块)&gt...

static final、static、final区别

static:静态,全局变量,类的对象共享一个静态变量,只初始化一次。

final:常量,如果是方法则不可覆盖,如果是类不可被继承,必须初始化时设置值,设置后就不能改了

static final:静态常量

初始化顺序如下:

父类静态变量(静态初始化话块)> 子类静态变量(静态初始化块)>父类普通变量(普通初始化块)>父类构造方法>父类普通方法

>子类普通变量(普通初始化块)>子类构造方法>子类普通方法

下面是一个例子就说明了这一切


  
  1. package com.loulijun.test1;
  2. public class Test1 {
  3. public static void main(String args[])
  4. {
  5. Son son = new Son();
  6. son.say();
  7. }
  8. }
  9. class Father
  10. {
  11. //static final 与 static 没有执行先后顺序,按照代码顺序从上而下执行
  12. //静态变量
  13. public static String str = initStr("Father:静态变量---1");
  14. //静态常量
  15. public static final int i = initfinal(2);
  16. //普通变量
  17. public int j = init(4);
  18. static int initfinal(int i)
  19. {
  20. System.out.println("Father:静态常量---"+i);
  21. return i;
  22. }
  23. static int init(int j)
  24. {
  25. System.out.println("Father:普通变量---"+j);
  26. return j;
  27. }
  28. //静态初始化块
  29. static
  30. {
  31. System.out.println("Father:静态初始化块---3");
  32. }
  33. static String initStr(String str)
  34. {
  35. System.out.println(str);
  36. return str;
  37. }
  38. //初始化块
  39. {
  40. System.out.println("Father:普通初始化块---5");
  41. }
  42. //构造方法
  43. public Father()
  44. {
  45. System.out.println("Father:父类构造器---6");
  46. }
  47. public void say()
  48. {
  49. System.out.println("Father:普通方法---7");
  50. }
  51. }
  52. class Son extends Father
  53. {
  54. //static final 与 static 没有执行先后顺序,按照代码顺序从上而下执行
  55. //静态变量
  56. public static String str = initStr("Son:静态变量---1");
  57. //静态常量
  58. public static final int i = initfinal(2);
  59. //普通变量
  60. public int j = init(4);
  61. static int initfinal(int i)
  62. {
  63. System.out.println("Son:静态常量---"+i);
  64. return i;
  65. }
  66. static int init(int i)
  67. {
  68. System.out.println("Son:普通变量---"+i);
  69. return i;
  70. }
  71. //静态初始化块
  72. static
  73. {
  74. System.out.println("Son:静态初始化块---3");
  75. }
  76. static String initStr(String str)
  77. {
  78. System.out.println(str);
  79. return str;
  80. }
  81. //初始化块
  82. {
  83. System.out.println("Son:普通初始化块---5");
  84. }
  85. //构造方法
  86. public Son()
  87. {
  88. System.out.println("Son:子类构造器---6");
  89. }
  90. public void say()
  91. {
  92. System.out.println("Son:普通方法---7");
  93. }
  94. }

运行结果:

Father:静态变量---1
Father:静态常量---2
Father:静态初始化块---3
Son:静态变量---1
Son:静态常量---2
Son:静态初始化块---3
Father:普通变量---4
Father:普通初始化块---5
Father:父类构造器---6
Son:普通变量---4
Son:普通初始化块---5
Son:子类构造器---6
Son:普通方法---7


文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/9138511

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。