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

  • 相关阅读:
    opencv.js小案例
    flutter获取状态栏高度
    Flutter自定义路由PageRouteBuilder
    Flutter控制屏幕旋转
    Flutter路由导航Navigator
    小程序组件中有bindinput监听报异常
    Flutter获取屏幕宽高和Widget大小
    正则表达式
    Python安装官方whl包、tar.gz包、zip包
    Python之mmap内存映射模块(大文本处理)说明
  • 原文地址:https://www.cnblogs.com/allenwas3/p/8888476.html
Copyright © 2011-2022 走看看