黑马程序员技术交流社区

标题: Java中类属性和对象属性初始化顺序小解 [打印本页]

作者: FFF    时间: 2013-9-27 21:00
标题: Java中类属性和对象属性初始化顺序小解
  1. public class Temp09_27 {

  2.         static  String a="String_a";
  3.         static String b;
  4.        
  5.         String c="String_c";
  6.         String d;
  7.        
  8.         static{
  9.                 printStatic("before static");
  10.                 b="Strint_b";
  11.                 printStatic("after statuc");
  12.         }
  13.        
  14.         public static void printStatic(String title)
  15.         {
  16.                 System.out.println("-------"+title+"-------");
  17.                 System.out.println("a=\""+a+"\"");
  18.                 System.out.println("b=\""+b+"\"");
  19.         }
  20.        
  21.         public Temp09_27()
  22.         {
  23.                 print("before constructor");
  24.                 d="String_d";
  25.                 print("after constructor");
  26.                
  27.                
  28.         }
  29.         public void print(String title)
  30.         {
  31.                 System.out.println("-------"+title+"-------");
  32.                 System.out.println("a=\""+a+"\"");
  33.                 System.out.println("b=\""+b+"\"");
  34.                 System.out.println("c=\""+c+"\"");
  35.                 System.out.println("d=\""+d+"\"");
  36.         }
  37.         public static void main(String[] args)
  38.         {
  39.                 new Temp09_27();
  40.         }
  41. }
复制代码
输出结果:
  1. -------before static-------
  2. a="String_a"
  3. b="null"
  4. -------after statuc-------
  5. a="String_a"
  6. b="Strint_b"
  7. -------before constructor-------
  8. a="String_a"
  9. b="Strint_b"
  10. c="String_c"
  11. d="null"
  12. -------after constructor-------
  13. a="String_a"
  14. b="Strint_b"
  15. c="String_c"
  16. d="String_d"
复制代码
由以上可知Java类属性和对象的初始化顺序为:
1.类属性(静态变量)定义时的初始化,如以上代码中的:statiic String a="String_a"。
2.static 块中的初始化代码,如以上的:static{}中的b="String_b"。
3.对象属性(非静态变量)定义时的初始化,如以上中的:String c="String_c"。
4.构造函数中的初始化代码,如以上构造函数中的:d="String_d"。

自学中总结到的一点规律,希望对同学们有帮助。



作者: 中山狼    时间: 2013-9-27 22:23
我记得毕老师的视频里的顺序要多一点,印象里应该是先执行方法区中的初始化,也就是静态代码块,之后才逐步执行堆内存中的(对象部分)的初始化
作者: FFF    时间: 2013-9-27 23:22
中山狼 发表于 2013-9-27 22:23
我记得毕老师的视频里的顺序要多一点,印象里应该是先执行方法区中的初始化,也就是静态代码块,之后才逐步 ...

毕老师更深入。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2