关于java中创建一个对象的代码执行过程
Java创建对象的代码执行顺序
相信大家在创建一个对象时都会这整个过程中类中的代码如何执行产生疑问,下面我们就用如下代码来测试一下在创建一个对象的时候执行的过程和顺序是什么样的.
public class Main extends F{ //声明子类Main继承雨父类F
Main(){
System.out.println("子类构造方法");
}
static {System.out.println("这是子类静态代码块");}
{System.out.println("这是子类普通代码块");}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new Main(); //创建一个子类对象
}
}
class F {
F(){
System.out.println("父类构造方法");
}
static {System.out.println("这是父类静态代码块");}
{System.out.println("这是父类普通代码块");}
}
从上图输出结果我们可以看到Java在创建一个对象时的代码执行顺序为:
(一)从修饰符来分析:
**1. **静态****:首先执行的是静态的代码区域,先是执行父类的静态代码块,然后是子类的静态代码块.(注:代码块包括类的成员变量和方法)
2. 普通代码块(包括构造方法):图中显示可知先是执行了父类的普通代码块(包括父类构造函数),再执行子类的普通代码块(包括父类构造方法)
(二)从父类子类分析:
在权重相同的情况下先执行父类的代码,在执行子类的代码.
如:
同样是静态代码,则先执行父类静态,在执行子类的静态代码.
同样是普通代码.,先执行父类的普通方法(包括构造方法),再执行子类的普通代码(包括构造方法).
最后小结:
在权重上(优先级):静态(static)的>普通的(非静态的,即没有static修饰的)
在上述权重(优先级)相同时,先执行父类代码,在执行子类代码
同时,对同样是普通代码,构造方法总是最后执行.
即先静态(先父类再子类),再普通(先父类再子类),其中的普通代码构造函数最后执行