代码块 静态代码块 就地初始化 构造方法 的执行顺序

问题描述:

Java实例化一个类,若这个类中不仅有构造方法,还有代码块,静态代码块,和就地初始化一个别的类的实例,那么代码的执行顺序是怎样的呢?


样例以及运行结果

people类

package Extends;

import Dog.Dog;

class people {
    
    
    public int age=100;
    public String name;

    Dog dog=new Dog();

    public people() {
    
    
        System.out.println("people");
    }
    {
    
    
        System.out.println("people的代码块");
    }
    static {
    
    
        System.out.println("people中的静态代码块");
    }
}

dog类

public class Dog {
    
    
    String name;
    int age;
    public Dog(){
    
    
        name="大黄";
        age=3;
        System.out.println("dog的初始化");
    }
}

主函数

public class Main {
    
    
    public static void main(String[] args) {
    
    
        people p1=new people();
        System.out.println("---------");
        people p2=new people();
    }
}

在这里插入图片描述

原因分析:

这里再people类中,不仅有代码块,静态代码块,构造方法,还就地初始化了一个dog实例,由结果可知,静态代码块的执行始终是最早的,但是执行一次,下来的同级别为:就地初始化和代码块,两者谁写的前面就先执行谁,最后执行的是构造方法。


import Dog.Dog;

class people {
    
    
    public int age=100;
    public String name;
    public people() {
    
    
        System.out.println("people");
    }
    {
    
    
        System.out.println("people的代码块");
    }
    static {
    
    
        System.out.println("people中的静态代码块");
    }
    Dog dog=new Dog();
}

在这里插入图片描述
这时dog的构造就在代码块之后。

猜你喜欢

转载自blog.csdn.net/weixin_45070922/article/details/112991240