黑马程序员技术交流社区

标题: 类的初始化问题 [打印本页]

作者: 程旦    时间: 2012-4-11 19:35
标题: 类的初始化问题
  1.   class Parent {

  2.           public static String p_StaticField = "父类--静态变量";
  3.           public String p_Field = "父类--变量";
  4.           static {
  5.                   System.out.println(p_StaticField);
  6.                   System.out.println("父类--静态初始化块");
  7.           }
  8.           {
  9.                   System.out.println(p_Field);
  10.                   System.out.println("父类--初始化块");
  11.           }
  12.           public Parent() {
  13.                    System.out.println("父类--构造器");
  14.            }
  15.   }
  16.   public class SubClass extends Parent {
  17.           public static String s_StaticField = "子类--静态变量";
  18.            public String s_Field = "子类--变量";
  19.            static {
  20.                    System.out.println(s_StaticField);
  21.                    System.out.println("子类--静态初始化块");
  22.            }
  23.            {

  24.                    System.out.println(s_Field);

  25.                    System.out.println("子类--初始化块");

  26.            }
  27.            public SubClass() {
  28.                    System.out.println("子类--构造器");
  29.            }
  30.            public static void main(String[] args) {
  31.                    new SubClass();
  32.            }
  33.   }
复制代码
有哪位亲帮我看看这题目的运行结果吗  并帮我分析分析
作者: 未长法    时间: 2012-4-11 20:00
对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

作者: 未长法    时间: 2012-4-11 20:01
父类静态代码块 ——>子类静态代码块 ——>  父类的非静态构造代码块 ——>  父类的构造方法——> 子类的非静态代码块 ——> 子类构造方法
作者: 邓斌    时间: 2012-4-11 20:16
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器
分析:
静态先执行,随着类的创建而加载,优先于对象先存在。
随后是构造代码块执行。
然后是构造函数执行。
子类继承父类。先执行父类程序,在执行子类程序。
静态>构造代码块>构造函数
父类>子类
子类静态>父类构造代码块
作者: 程旦    时间: 2012-4-11 20:29
邓斌 发表于 2012-4-11 20:16
父类--静态变量
父类--静态初始化块
子类--静态变量

懂了。。。很明白
作者: 程旦    时间: 2012-4-11 20:30
邓斌 发表于 2012-4-11 20:16
父类--静态变量
父类--静态初始化块
子类--静态变量

懂了。。。很明白很清楚




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