zoukankan      html  css  js  c++  java
  • 类的实例化顺序

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

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

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

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

  • 相关阅读:
    promise请求数据(all方法)
    右键的点击事件
    微信小程序的接口调用封装
    微信小程序HTTP接口请求封装
    微信小程序得路由跳转
    管理系统得操作与解决思路
    HTTP协议
    动态语言概述
    AsynclAwait
    三种跨域解决方案
  • 原文地址:https://www.cnblogs.com/feiyang930112/p/10618083.html
Copyright © 2011-2022 走看看