Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的静态和非静态初始化块_Java - Fatal编程技术网

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

Java中的静态和非静态初始化块,java,Java,为什么此代码打印的是11,而不是10。显然,执行静态初始化块中的i++。 但是,为什么不执行非静态块中的i--。 这里发生了什么事 一类 { 静态积分i=10; { 我--; } } 公共类Main扩展了ClassOne { 静止的 { i++; } 公共静态void main(字符串[]args) { 系统输出打印LN(i); } } 创建实例时将调用非静态初始化块 您从不创建新实例,因此不会执行块。这与实例初始值设定项块和静态初始值设定项块特别相关。在上面的示例中,带有i--的块是实例初始值

为什么此代码打印的是
11
,而不是
10
。显然,执行静态初始化块中的
i++

但是,为什么不执行非静态块中的
i--

这里发生了什么事

一类
{
静态积分i=10;
{
我--;
}
}
公共类Main扩展了ClassOne
{
静止的
{
i++;
}
公共静态void main(字符串[]args)
{
系统输出打印LN(i);
}
}

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


您从不创建新实例,因此不会执行块。

这与实例初始值设定项块和静态初始值设定项块特别相关。在上面的示例中,带有
i--
的块是实例初始值设定项块,每次创建Main或ClassOne的新实例时都将执行该块


静态初始化程序块在类加载时执行。所以,当主类被加载到内存中时,它的父类首先被加载,然后变量也被加载到内存中。此后,将执行Main中的静态块,从而在控制台上打印11。

无论如何,请不要使用实例初始化块。许多人甚至不知道它们的存在,在代码中找到它们是非常令人困惑的。只需使用常规构造函数或字段初始化即可。永远不要说“永不”。它们有合法(但很少)的用途。