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> 方法,即按顺序收集构造函数外部的语句,然后再执行构造函数内的语句。

  • 相关阅读:
    java多线程编程(一)
    java的本地文件操作
    Java基础总结(二)
    Gym 100851 Distance on Triangulation
    Gym 100851 题解
    Gym 101482 题解
    CodeForces Round 521 div3
    zoj 5823 Soldier Game 2018 青岛 I
    CodeForces round 520 div2
    CodeForces 1042 F Leaf Sets 贪心
  • 原文地址:https://www.cnblogs.com/allenwas3/p/8888476.html
Copyright © 2011-2022 走看看