黑马程序员技术交流社区
标题:
关于初始化的一些问题
[打印本页]
作者:
左建飞
时间:
2012-8-4 18:20
标题:
关于初始化的一些问题
class A//加载子类前会先加载父类。
{
B b = new B();
A() //加载时会执行构造函数么?
{
System.out.print("A");
}
}
class B
{
B()
{
System.out.print("B");
}
static
{
System.out.print("静态代码块");
}
}
class C extends A
{
B b = new B();
C()
{
System.out.print("C");
}
public static void main(String[] args)
{
new C();
}
}
复制代码
作者:
焦晨光
时间:
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.类初始化过程:首先会加载父类,并先初始化父类的静态初始化,即
static
{
System.out.print("静态代码块");
}
复制代码
然后根据顺序向下执行当前类的静态初始化代码块。
2.对象的初始化:先执行父类的初始化块和构造函数,即
B()
{
System.out.print("B");
}
复制代码
然后在依次执行
A()
{
System.out.print("A");
}
复制代码
B()
{
System.out.print("B");
}
复制代码
C()
{
System.out.print("C");
}
复制代码
所以肯定会先执行父类的构造函数
作者:
左建飞
时间:
2012-8-6 11:48
问题已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2