黑马程序员技术交流社区

标题: 关于对象创建 [打印本页]

作者: 大笑哈哈    时间: 2016-6-18 22:56
标题: 关于对象创建
package com.heima.day23;

public class Test9 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                new Child();
        }

}
class bb {
        public bb(){
                System.out.println("bb");
        }
}
class Parent
{       
         
    public static int t = parentStaticMethod2();
    {
        System.out.println("父类非静态初始化块");
    }
    bb b = new bb();
    static
    {
        System.out.println("父类静态初始化块");
    }
    public Parent()
    {
        System.out.println("父类的构造方法");
    }
    public static int parentStaticMethod()
    {
        System.out.println("父类类的静态方法");
        return 10;
    }
    public static int parentStaticMethod2()
    {
        System.out.println("父类的静态方法2");
        return 9;
    }
}

  class Child extends Parent
{
     {
         System.out.println("子类非静态初始化块");
     }
     static
     {
         System.out.println("子类静态初始化块");
     }
     public Child()
     {
         System.out.println("子类的构造方法");
     }
     public static int childStaticMethod()
     {
         System.out.println("子类的静态方法");
         return 1000;
     }
}
以下为结果:
父类的静态方法2
父类静态初始化块
子类静态初始化块
父类非静态初始化块
bb
父类的构造方法
子类非静态初始化块
子类的构造方法
程序说明
1,父类优先子类加载 , 加载完毕后加载子类class文件
2,执行子类构造函数之前先对父类对象初始化.父类的初始化为时, 父类属性 构造代码块以在程序位置先后执行(不一定是构造方法之前执行构造代码块)
最后执行构造方法对父类属性进行显示初始化 .
附:   
一个网上的说法,感觉很实用,但是第三点与程序执行结果相驳.

我给你一个最全的顺序,按这个顺序去分析:









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