zoukankan      html  css  js  c++  java
  • java 类变量初始化顺序

    假定有一个类定义如下:

    package com.zhang;
    
    public final class Girl {
        // static代码块1
        private static String sex = "female";
        // 成员方法代码块1
        private String name = "anonymous";
        
        // static代码块2
        static {
            System.out.println("static1");
        }
        
        // 成员方法代码块3
        public Girl() {
            System.out.println("constructor");
        }
        
        // static代码块3
        static {
            System.out.println("static2");
        }
        
        // 成员方法代码块2
        private int age = 18;
    }

    第一次加载类,并创建该类对象时,静态变量、成员变量的初始化顺序,静态代码的执行顺序是怎样的?

    创建一个类对象,如果该类没有初始化,则先初始化该类(执行 clinit 方法),然后执行构造函数(init 方法),具体就是先执行 class 文件中的 static 代码块,然后再执行构造函数代码块。观察上面类的 class 文件 static 代码块:

    可以看出,static 代码块内容就是,把 static 语句按顺序搜集起来,static 变量赋值也是 static 语句,伪代码如下:

    static {
        sex = "female";
        System.out.println("static1");
        System.out.println("static2");
    }

    构造函数代码块:

    对应的伪代码如下:

    public Girl() {
    <init> name
    = "anonymous"; age = 18; System.out.println("constructor"); }

    首先执行 <init> 方法,即按顺序收集构造函数外部的语句,然后再执行构造函数内的语句。

  • 相关阅读:
    <Redis开发与运维> 阅读笔记
    请求行,请求头,请求体详解
    char 与 varchar 的区别
    python字符串的常用方法。
    快速排序的代码及原理
    C#之Dictionary源码
    C#中构造函数
    U3D——单例模式的用法
    U3D学习——设置VS2019作为开发工具
    U3D学习——脚本运行周期
  • 原文地址:https://www.cnblogs.com/allenwas3/p/8888476.html
Copyright © 2011-2022 走看看