zoukankan      html  css  js  c++  java
  • 类中静态/普通/构造初始化顺序

     实际上,如果严格区分类的初始化 和 对象的实例化的话,更容易理解:

    -- 首先,初始化

       静态代码块

          (注:静态变量在底层实际上是通过静态代码块赋值的 

              如,static int a = 3;   

                 实际上,  static int a;     

                  static{ a = 3;}   

    --  其次,实例化

       实例代码块

       构造函数

         (注:实例代码块永远在构造函数之前执行)

    如果又继承关系的话,就是, 父的初始化,子的初始化, 父的实例化,子的实例化

    初始化永远在实例化之前

    https://www.cnblogs.com/jimxz/p/3974939.html

    一个例子:注意区分 类初始化  和  对象实例化

    public class Test {
    
        public static Test t1=new Test();
    
        public Test(){
            System.out.println("init");
        }
        
        {
            System.out.println("blockA");
        }
        
        static {
            System.out.println("blockB");
        }
        
        public static void main(String[] args){
            Test t2=new Test();
        }
    }

    结果:

    通过例子区分下  初始化 和实例化

    class X{
        static Y y = new Y();
        Y y2 = new Y();
    }
    
    class Y{
        Y(){
            System.out.println("y");
        }
    }
    public class Z extends X{
    
        public static void main(String[] args) {
            
        }
    }

    Z是主线程,所以要初始化Z,但是会先初始化X。    由于X不涉及到实例化,所以  y  只输出了一次

  • 相关阅读:
    Array 对象-sort()
    vue安装
    前端面试题
    JavaScript对象原型
    CSS如何水平垂直居中?
    块格式化上下文(Block Formatting Context,BFC)
    盒子模型
    前端基础
    Markdown语法
    浏览器 滚动条 占据 y轴宽度的解决方案
  • 原文地址:https://www.cnblogs.com/heyboom/p/11193841.html
Copyright © 2011-2022 走看看