黑马程序员技术交流社区
标题:
求静态代码块,子类继承父类的问题
[打印本页]
作者:
臧立洋
时间:
2012-12-3 22:12
标题:
求静态代码块,子类继承父类的问题
class Person
{
{
System.out.println("构造代码块=a");
}
static
{
System.out.println("静态代码块=a");
}
Person(){
System.out.println("构造方法=a");
}
void show()
{
System.out.println("Person");
}
}
class Student extends Person
{
String name = "aaa";
{
System.out.println("构造代码块=b");
}
static
{
System.out.println("静态代码块=b");
}
Student(){
System.out.println("构造方法=b");
}
void show()
{
System.out.println("Student");
}
}
public class Test
{
public static void main(String[] args)
{
Student p = new Student();
}
}
请问下输出的顺序是什么?为什么
作者:
黑马刘向阳
时间:
2012-12-3 22:26
输出顺序:
静态代码块=a
静态代码块=b
构造代码块=a
构造方法=a
构造代码块=b
构造方法=b
当创建对象p时,会加载Student类,而Student类又继承了Person类,所以Person应该是先于子类加载。
静态代码块随类加载而执行,用于对类的初始化,并且只执行一次,因为类只加载一次。所以先执行父类静态代码块,在执行子类的静态代码块。
创建对象时,会先对继承自父类的属性初始化,构造代码块是对所有对象初始化的,构造方法对特定的对象初始化,
所以先执行父类中的构造代码块,在执行父类的构造方法,
然后在执行子类的构造代码块,最后执行子类的构造方法,完成对对象的初始化操作。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2