zoukankan      html  css  js  c++  java
  • JVM类的加载顺序

    前阵子看到阿里巴巴的一提面试题是关于java类的加载顺序

    package com.mikey.demo.Test;
    
    class FatherVariable{
        static {
            System.out.println("FatherVariable Static Constructor Code");
        }
        {
            System.out.println("FatherVariable Constructor Code");
        }
        public FatherVariable() {
            System.out.println("FatherVariable Constructor Method");
        }
    }
    
    class ChildVariable{
        static {
            System.out.println("ChildVariable Static Constructor Code");
        }
        {
            System.out.println("ChildVariable Constructor Code");
        }
        public ChildVariable() {
            System.out.println("ChildVariable Constructor Method");
        }
    }
    
    class Father{
    
        static FatherVariable fatherVariable = new FatherVariable();
    
        static {
            System.out.println("Father Static Constructor Code");
        }
        {
            System.out.println("Father Constructor Code");
        }
        public Father() {
            System.out.println("Father Constructor Method");
        }
    }
    
    class Child extends Father {
    
        static ChildVariable childVariable = new ChildVariable();
    
        static {
            System.out.println("Child Static Constructor Code");
        }
        {
            System.out.println("Child Constructor Code");
        }
        public Child() {
            System.out.println("Child Constructor Method");
        }
    }
    
    public class Clazz {
        public static void main(String[] args) {
            new Child();
            //父类静态变量
            //FatherVariable Static Constructor Code
            //FatherVariable Constructor Code
            //FatherVariable Constructor Method
            //父类静态代码块
            //Father Static Constructor Code
            //子类静态变量
            //ChildVariable Static Constructor Code
            //ChildVariable Constructor Code
            //ChildVariable Constructor Method
            //子类静态代码块
            //Child Static Constructor Code
            //父类构造代码块
            //Father Constructor Code
            //父类构造方法
            //Father Constructor Method
            //子类构造代码块
            //Child Constructor Code
            //子类构造方法
            //Child Constructor Method
        }
    }
    View Code

    图解分析

     

    实例化顺序

        父类静态变量
           ↓

        父类静态代码块
              ↓
        子类静态变量
              ↓
        子类静态代码块
              ↓
        父类构造代码块
              ↓
        父类构造方法
              ↓
        子类构造代码块
              ↓
        子类构造方法
            //父类静态变量
            //FatherVariable Static Constructor Code
            //FatherVariable Constructor Code
            //FatherVariable Constructor Method
            //父类静态代码块
            //Father Static Constructor Code
            //子类静态变量
            //ChildVariable Static Constructor Code
            //ChildVariable Constructor Code
            //ChildVariable Constructor Method
            //子类静态代码块
            //Child Static Constructor Code
            //父类构造代码块
            //Father Constructor Code
            //父类构造方法
            //Father Constructor Method
            //子类构造代码块
            //Child Constructor Code
            //子类构造方法
            //Child Constructor Method        

    结论:

    1.带继承的类:

    先按照声明顺序初始化基类静态变量和静态代码块,接着按照声明顺序初始化子类静态变量和静态代码块,

    而后按照声明顺序初始化基类普通变量和普通代码块,然后执行基类构造函数,接着按照声明顺序初始化子类普通变量和普通代码块

    最后执行子类构造函数。

    合群是堕落的开始 优秀的开始是孤行
  • 相关阅读:
    Silverlight4 打印 生成文件过大解决
    清理 Visual Studio 工具箱 的冗杂控件(第三方控件卸载不完全)
    SQL2005SP4生成数据库脚本视图依赖顺序错误问题
    SQL Server 2005 企业版没有 Management Studio管理工具
    Excel Reader 轻量级
    开发托管ActiveX或第三方程序托管插件时调试问题解决方法
    Entity Framework 从数据库生成模型丢失数据库文档不完美解决方案
    今天写了个很蛋疼的sql语句
    WinForm 内嵌 Office 文档 解决方案测试(非DSOFRAME 纯C#代码,网上独一份)
    生产者、消费者问题之闹钟
  • 原文地址:https://www.cnblogs.com/biaogejiushibiao/p/9268621.html
Copyright © 2011-2022 走看看