类的初始化和代码的执行顺序

发布时间:2022-06-27 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了类的初始化和代码的执行顺序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
package com.siyu.model.others;

/**
 * 类的初始化
 *
 * 1-静态代码块和静态类变量初始化顺序,谁在上面,谁先执行,只执行一次。
 * 2-非静态成员变量和非静态代码块谁在上谁先执行,并且每实例化一次,就执行一次;构造器最后执行,
 * 3-在子类的构造器,一定会调用父类的构造器,有时候省略不写,默认有一个super。子类的初始化会调用父类初始化
 *
 */
public class Father {

    private int i = test();
    private static int j = method();

    static {
        System.out.println("(1) 父类静态代码块");
    }

    public Father() {
        System.out.println("(2) 我是父类构造方法");
    }

    {
        System.out.println("(3) 父类非静态代码块");
    }

    public int test() {
        System.out.println("(4) 父类成员方法");
        return 1;
    }

    public static int method() {
        System.out.println("(5) 父类静态方法");
        return 1;
    }
}

class Son extends Father {

    private int i = test();

    private static int j = method();

    static {
        System.out.println("(6) 子类静态代码块");
    }

    public Son() {
        System.out.println("(7) 子类构造方法");
    }

    {
        System.out.println("(8) 子类非静态代码块");
    }

    public int test() {
        System.out.println("(9) 子类成员方法");
        return 1;
    }

    public static int method() {
        System.out.println("(10) 子类静态方法");
        return 1;
    }

    /**
     * (5) 父类静态方法
     * (1) 父类静态代码块
     * (10) 子类静态方法
     * (6) 子类静态代码块
     * (9) 子类成员方法
     * (3) 父类非静态代码块
     * (2) 我是父类构造方法
     * (9) 子类成员方法
     * (8) 子类非静态代码块
     * (7) 子类构造方法
     *
     * (9) 子类成员方法
     * (3) 父类非静态代码块
     * (2) 我是父类构造方法
     * (9) 子类成员方法
     * (8) 子类非静态代码块
     * (7) 子类构造方法
     * @param args
     */
    public static void main(String[] args) {
        Son s1 = new Son();
        /*
        首先初始化类,然后再初始化对象
        开始初始化类了
        先初始化父类
        类变量和静态代码块初始化的顺序是:谁在上,先初始化谁。所以在本题中,先初始化类变量,执行method(),然后静态代码块,所以打印(5)(1)
        然后初始化子类,打印(10) (6)
        至此,类初始化完成,接下来开始初始化对象了。

        初始化子类对象第一步是先初始化父类,因为子类要继承父类东西
          初始化父类,非静态成员变量和非静态代码块的顺序是,谁在上,先初始化谁,构造器最后,所以父类初始化的顺序是:(9)(3)(2)
          不应该是(4)(3)(2)吗?不是,因为test()方法是子类重写,一个方法父子类都有,子类初始化,所以执行的是子类的test()
          然后初始化子类
          子类是:(9)(8)(7)

         */

        System.out.println();
        // 后面又实例化一个新对象,那就再初始化一边。
        Son s2 = new Son();
    }
}

脚本宝典总结

以上是脚本宝典为你收集整理的类的初始化和代码的执行顺序全部内容,希望文章能够帮你解决类的初始化和代码的执行顺序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: