一。JAVA中执行顺序
静态块
块
构造器
父类构造器
静态块直接赋值
块直接赋值
父类继承的属性已赋值
静态变量声明时赋值
成员变量声明时赋值
构造器赋值
- Java代码
public class Mastiff extends Dog {
public Mastiff() {
System.out.println("Mastiff");
}
{
System.out.println("block");
}
static {
System.out.println("static block");
}
public static void main(String[] args){
Mastiff mastiff=new Mastiff();
}
}
- Java代码
public class Dog {
public Dog() {
System.out.println("Dog");
}
}
静态块
父类构造器
本类中的块
本类的构造器
- Java代码
public class Dog {
public Dog() {
System.out.println("Dog");
}
static{
System.out.println("super static block");
}
{
System.out.println("super block");
}
}
- Java代码
public class Mastiff extends Dog {
public Mastiff() {
System.out.println("Mastiff");
}
{
System.out.println("block");
}
static {
System.out.println("static block");
}
public static void main(String[] args){
Mastiff mastiff=new Mastiff();
}
}
父类静态块
自身静态块
父类块
父类构造器
自身块
自身构造器
二。JAVA中赋值顺序
第一部分很好测试,我们只需要写一个子类,类中定义一个静态块,一个普通块,一个构造器,它的父类构造器,都打印一条语句,即可明白它们直接的执行顺序
Mastiff类
DOG类
运行结果为:
staticblock
Dog
block
Mastiff
也就是说,在我们的程序中,实例化一个类对象的时候,运行顺序为:
我们可以更进一步,如果在父类中也有块和静态块呢?
DOG类改进后源码
Mastiff改进后源码
运行的结果为:
superstaticblock
staticblock
superblock
Dog
block
Mastiff
也就是说此时的运行顺序为: