黑马程序员技术交流社区

标题: 关于初始化的一些问题 [打印本页]

作者: 左建飞    时间: 2012-8-4 18:20
标题: 关于初始化的一些问题
  1. class A//加载子类前会先加载父类。
  2. {
  3.         B b = new B();
  4.         A() //加载时会执行构造函数么?
  5.         {
  6.                 System.out.print("A");
  7.         }
  8.         
  9.         
  10. }

  11. class B
  12. {
  13.         B()
  14.         {
  15.                 System.out.print("B");
  16.         }
  17.         static
  18.         {
  19.                 System.out.print("静态代码块");
  20.         }
  21. }


  22. class C extends A
  23. {
  24.         B b = new B();
  25.         C()
  26.         {

  27.                 System.out.print("C");
  28.         }

  29.         public static void main(String[] args)
  30.         {
  31.                 new C();
  32.         }
  33. }
复制代码

作者: 焦晨光    时间: 2012-8-4 18:43
class A//加载子类前会先加载父类。  是的,类初始化阶段加载类之前java会先加载父类并先初始化父类的静态初始化块,
//然后依次向下直到执行当前类的静态初始化块

{
        B b = new B();
        A() //加载时会执行构造函数么?//会,对象初始化阶段  会先执行父类的初始化块、和构造器    然后依次向下直到执行到当前类的初始化块、和构造器
  {
                System.out.print("A");
        }

        }
总结:类加载初始化过程 一个类加载进内存会进行以下两步
1.类初始化阶段:先初始化父类的静态初始化块,然后依次向下直到执行当前类的静态初始化块
2.对象初始化阶段:先执行父类的初始化块、和构造器    然后依次向下直到执行到当前类的初始化块、和构造器


作者: 刘悦    时间: 2012-8-4 19:59
1.类初始化过程:首先会加载父类,并先初始化父类的静态初始化,即
  1. static
  2.          
  3.                 {
  4.          
  5.                         System.out.print("静态代码块");
  6.          
  7.                 }
复制代码
然后根据顺序向下执行当前类的静态初始化代码块。
2.对象的初始化:先执行父类的初始化块和构造函数,即
  1. B()
  2.                 {
  3.          
  4.                         System.out.print("B");
  5.          
  6.                 }
复制代码
然后在依次执行
  1. A()
  2.          
  3.                 {
  4.          
  5.                         System.out.print("A");
  6.          
  7.                 }
复制代码
  1. B()
  2.                 {
  3.          
  4.                         System.out.print("B");
  5.          
  6.                 }
复制代码
  1. C()
  2.                 {
  3.          

  4.                         System.out.print("C");
  5.          
  6.                 }
复制代码
所以肯定会先执行父类的构造函数
作者: 左建飞    时间: 2012-8-6 11:48
问题已解决




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