• 类的实例化顺序


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

    /**
     * 测试实例化父类
     */
    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()方法>父类构造代码块>父类构造方法>子类构造代码块>子类构造方法

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

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

  • 相关阅读:
    html <applet>元素属性介绍
    C#内存释放(转)
    mongodb for linux (安装)
    WCF客户端搭建(通过自定义WCF Client封装) wu
    SQL常用语句 wu
    任务调度平台 wu
    将DataSet 纵向显示数据
    关于OP和SI项目的记录点,防止遗忘难以查找
    java进阶
    git代码量统计
  • 原文地址:https://www.cnblogs.com/feiyang930112/p/10618083.html
Copyright © 2020-2023  润新知