黑马程序员技术交流社区
标题:
各类型代码块执行流程的疑问!大大们速进啊
[打印本页]
作者:
15863453752
时间:
2015-8-31 14:55
标题:
各类型代码块执行流程的疑问!大大们速进啊
class DemoCodeBlock {
static {
System.out.println("这是主函数的静态代码块");
}
public static void main(String[] args) {
Student s = new Student();
}
}
class Person {
private String name;
private int age ;
public Person() {
System.out.println("这是父类构造方法");
}
public Person(String name,int age) {
this.name = name;
this.age = age ;
System.out.println("这是父类构造方法");
}
static {
System.out.println("这是父类的静态代码块");
}
{
System.out.println("这是父类动态代码块");
}
}
class Student extends Person {
public Student() {
System.out.println("这是子类构造方法");
}
public Student(String name, int age) {
super(name,age);
System.out.println("这是子类构造方法");
}
static {
System.out.println("这是子类静态代码块");
}
{
System.out.println("这是子类动态代码块");
}
}
作者:
15863453752
时间:
2015-8-31 15:00
输出结果执行流程是:1.这是主函数的静态代码块 2.这是父类的静态代码块 3.这是子类的静态代码块 4这是父类的构造代码块 5 这是父类的构造方法 6这是子类的构造代码块 7这是子类的构造方法 为什么父类的构造代码块会优先于子类的构造代码块执行呢?new Student的时候不应该先去执行Student的构造方法,一执行Student的构造方法,Student类中的构造方法不是应该优先执行吗?
作者:
王盟
时间:
2015-8-31 17:48
为什么父类的构造代码块会优先于子类的构造代码块执行呢?
个人理解(水平有限):因为子类继承了父类,也就相当于拥有了父类的非私有成员变量和成员方法的使用权,必须要先加载父类,创建父类对象,然后再创建子类对象的,这样保证子类对象创建的时候是已经拥有父类的变量和方法的。
静态构造代码块优先与构造代码块是因为,静态的是属于类的,在创建对象之前,当方法区中存入父类和子类的时候就依据继承关系先加载了父类,然后是子类,也就执行了父类和子类的静态构造代码块,接下来才是创建对象的过程。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2