美文网首页java基础与进阶首页投稿(暂停使用,暂停投稿)Android开发
分析java类的静态成员变量初始化先于非静态成员变量

分析java类的静态成员变量初始化先于非静态成员变量

作者: 三生浮屠 | 来源:发表于2016-08-05 17:05 被阅读91次

依上图中当class字节码文件被jvm虚拟机加载到内存中依次经过

  • 连接
    • 验证:对字节码进行验证
    • 准备:给静态变量分配内存并赋予变量类型各自的默认值(注:基本类型为0或false,对象为null,static final修饰的常量直接赋予相应的值)
    • 解析:类中符号引用转换成直接引用
  • 初始化:为类的静态变量/静态语句块初始化相应的值
    而类的初始化契机是:类在被第一次主动使用的情况下,主动使用包括以下6中情况:
    1. 使用new关键字实例化对象时。
    2. 调用某个类的静态方法时。
    3. 读取或设置类的静态字段时(被final修饰、已在编译期把结果放入常量池的除外)。
    4. 使用java.lang.reflect包的方法对类进行反射调用。
    5. 初始化某个类的子类时。
    6. 虚拟机启动时被标明为启动类(包含main方法的类)。
      从上面我们知道了静态成员变量的初始化发生在类的 初始化阶段,而要实例化一个对象就必须先去加载、连接、以及初始化该类,才能去使用该类去实例化对象,而非
      静态成员变量的初始化发生在对象的实例化过程中。如下例子可以看出当一个类被第一次主动使用静态块或静态成员变量会被初始化。

1 package com.space.equalstest; 2 3 public class Dog { 4 public static String name = "tom"; 5 6 static { 7 System.out.println("Dog init"); 8 } 9 10 public static void info() { 11 System.out.println("a dog"); 12 } 13 }


1 package com.space.equalstest; 2 3 public class Test { 4 public static void main(String[] args) { 5 Dog.info();//首次主动使用进行初始化 6 Dog.info();//不会再去初始化 7 } 8 }


输出结果:
1 Dog init
2 a dog
3 a dog

相关文章

  • java类初始化顺序

    原则 变量优先于块、静态变量优先于非静态 父类优先于派生类初始化 按照成员变量定义的顺序来进行初始化,即使变量定义...

  • java相关零碎知识

    java初始化,加载顺序: 父类的静态成员变量,父类静态代码块,子类的静态成员变量,子类的静态代码块,父类非静态成...

  • 分析java类的静态成员变量初始化先于非静态成员变量

    依上图中当class字节码文件被jvm虚拟机加载到内存中依次经过 连接验证:对字节码进行验证准备:给静态变量分配内...

  • static静态成员变量、成员函数的作用

      数据成员可以分为静态变量、非静态变量两种。  静态成员:静态类中的成员加入static修饰符,即是静态成员,可...

  • 设计模式——工厂,策略,建造者

    Java 类初始化顺序基本分为以下几种:静态块,初始化块,静态方法,构造函数块,静态变量,成员变量对于块顺序,静态...

  • log4j2使用手册(中文)第六章 使用

    静态Logger VS 非静态Logger 与Java中的任何变量一样,Logger可以声明为静态变量或类成员变量...

  • static关键字

    在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用...

  • C++中的成员变量和成员函数

    C++中的类有两个成分: (1)成员变量 成员变量按照作用域分为静态成员变量和非静态成员变量,C++中成员变量的默...

  • 内部类

    静态内部类 静态内部类只能调用静态成员变量,不能调用非静态成员变量; 成员内部类 成员内部类和成员变量类似; 局部...

  • 四、JNI-成员和方法

    成员 方法 #1. 成员 Java中成员变量分为普通成员变量和静态成员变量。普通成员变量也称为类实例成员变量,所有...

网友评论

    本文标题:分析java类的静态成员变量初始化先于非静态成员变量

    本文链接:https://www.haomeiwen.com/subject/pbohsttx.html