java - java中的静态初始化

标签 java jvm

我知道有很多与此类似的问题,但我想获得有关此问题的一些详细解释。

假设我有这个代码 -

 public class Finalexamples {

        public int num = 3;
        public static int num2;
        public static Finalexamples a;

        public Finalexamples(){
            Finalexamples.num2 = 4;
        }

        static{
            a = new Finalexamples();
             System.out.println(num2);
             Finalexamples.num2 = 5;
            }

    public static void main(String[] args) {
        System.out.println("Starting...");
    }

}
  1. 当 JVM 加载 .class 文件时,是否首先使用默认值初始化静态变量,然后在程序运行时使用文字值?
  2. 在我的示例中,静态 block 输出“4”(固定),如果有人可以解释为什么它不是 0?

最佳答案

为什么0?它应该输出 4 而不是。

类加载时,静态字段和语句按照出现的顺序读取并执行。

所以这些首先执行:

public static int num2;
public static Finalexamples a;

然后调用:

 static{
          a = new Finalexamples();
          System.out.println(num2);
          Finalexamples.num2 = 5;
      }

此:a = new Finalexamples();执行:Finalexamples.num2 = 4;

因此System.out.println(num2);显示4

关于java - java中的静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43452032/

相关文章:

java - 尝试运行 docker compose 时出错

java - Volley - 无法解析构造函数“JSONObjectRequest

java - 为什么字节码可能比 native 代码运行得更快

java - Java中什么时候为对象(PO​​JO)分配内存

java - Base64.encode() 不适用于大字节数组

java - 寻找 StringBuilder 的高性能替代品

java - webflow评估表达式不调用方法

java - 无法同时启动 Alfresco 和 Ephesoft 应用程序

Java.lang.OutOfMemory错误: Java heap space [Ubuntu]

java - 尝试使用 javazoom 播放 MP3 文件并收到错误消息 "unable to load resource ' sfd.ser”