A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 左建飞 中级黑马   /  2012-8-4 18:20  /  2106 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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-5 08:59

3 个回复

倒序浏览
class A//加载子类前会先加载父类。  是的,类初始化阶段加载类之前java会先加载父类并先初始化父类的静态初始化块,
//然后依次向下直到执行当前类的静态初始化块

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

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

回复 使用道具 举报
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.                 }
复制代码
所以肯定会先执行父类的构造函数
回复 使用道具 举报
问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马