java - Java 中的静态和非静态初始化 block

标签 java

为什么此代码打印 11 而不是 10。显然,静态初始化 block 中的i++被执行了。
但是,为什么非静态 block 中的i--没有被执行。
这里发生了什么?

class ClassOne
{
    static int i = 10;

    {
        i--;
    }

}

public class Main extends ClassOne
{
    static
    {
        i++;
    }

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

    }
}

最佳答案

非静态初始化 block 将在实例创建时调用。

您永远不会创建新实例,因此该 block 不会被执行。

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

相关文章:

java - 将我现有的 Android 项目从 Java 8 迁移到 Java 11 时出现 "error: package android.view does not exist"错误

java - 如何在 Spring Boot Controller 之外正确 @Autowire 数据访问对象?

java - 防止用户编辑同一条记录

JBoss 中的 java.sql.SQLException : Generated keys not requested.

java - 使用 powermock 模拟枚举实例化

java - 如何在java中转换时间数据?

java - 我无法弄清楚如何处理收到的错误。这是我的购物车项目

java - 当 ArrayList 中多个对象相同时,如何找到它们的索引

java - 没有主类的 selenium testng maven 项目的可执行 jar

java - GWT FIFO 有序队列或列表?