• 类的实例化顺序


    通过简单的代码,更清晰的了解了,一个类的实例化顺序

    /**
     * 测试实例化父类
     */
    public class ParentInstance {
        
        public ParentInstance() {
            System.out.println("父类构造方法");
            this.print();
        }
        
        {
            System.out.println("父类构造代码块");
        }
        
        static {
            System.out.println("父类静态代码块");
        }
    
        public void print() {
            System.out.println("父类打印方法");
        }
        
    }
    /**
     * 测试实例化子类
     */
    public class SonInstance extends ParentInstance {
        
        public SonInstance() {
            System.out.println("子类构造方法");
            this.print();
        }
        
        {
            System.out.println("子类构造代码块");
        }
        
        static {
            System.out.println("子类静态代码块");
        }
    
        public void print() {
            System.out.println("子类打印方法");
        }
        
        public static void main(String[] args) {
            System.out.println("子类main()方法");
            new SonInstance();
        }
        
    }

    结果如下:

    父类静态代码块
    子类静态代码块
    子类main()方法
    父类构造代码块
    父类构造方法
    子类打印方法
    子类构造代码块
    子类构造方法
    子类打印方法

    由于父类打印方法被子类覆盖,因此尽管父类调用的是this.print(),但最终还是调用子类的打印方法。

    总结如下:

    父类静态代码块>子类静态代码块>子类main()方法>父类构造代码块>父类构造方法>子类构造代码块>子类构造方法

    静态代码块:在虚拟机加载类的时候就会加载执行,而且只执行一次。

    非静态代码块:在创建对象的时候执行,每次创建对象都会执行一次。

  • 相关阅读:
    Vue 事件修饰符 阻止默认事件
    vue created 生命周期
    续集---网络管理常用命令
    网络管理常用命令(6/14) -netstat命令详解
    系统OOM复位定位
    nohup- Shell后台运行
    一个linux命令(6/13):traceroute命令
    一个linux命令(6/12):cat 命令
    linux命令(6/11)--修改文件的用户组chgrp和文件所有者chown
    Linux终端快捷键
  • 原文地址:https://www.cnblogs.com/feiyang930112/p/10618083.html
Copyright © 2020-2023  润新知