繁体   English   中英

Java 中的静态和非静态初始化块

[英]Static and Non-Static initialization blocks in Java

为什么此代码打印11而不是10 显然,静态初始化块中的i++被执行。
但是,为什么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);

    }
}

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

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

这与实例初始化程序块和静态初始化程序块特别相关。 在上面的例子中,带有i--的块是实例初始化块,每次创建 Main 或 ClassOne 的新实例时都会执行。

静态初始化块在类加载时执行。 因此,当 Main 类被加载到内存中时,它的父类首先被加载,然后变量也被加载到内存中。 此后 Main 中的静态块被执行,导致 11 被打印在控制台上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM