JAVA代码片段:输出解释

JAVA代码片段:输出解释,java,Java,我正在浏览java代码片段,这一段我不明白为什么输出是2 package com.instanceofjava; public class A{ static int a = 1111; static { a = a-- - --a; } { a = a++ + ++a; } public static void main(Str

我正在浏览java代码片段,这一段我不明白为什么输出是2

 package com.instanceofjava;     
    public class A{  
     static int a = 1111;
     static
     {
            a = a-- - --a;
     }        
     {
            a = a++ + ++a;
     }     
     public static void main(String[] args)  {     
           System.out.println(a);     
        }     
    }

有人能解释为什么这个代码段的输出是2吗

由于不创建类的实例,因此只执行静态初始值设定项块(不执行实例初始值设定项块中的表达式
a=a+++++++a;

第一个
a
被初始化为1111(由于
static int a=1111;

然后执行静态初始值设定项块,并执行以下赋值:

a = a-- - --a;
a--
递减
a
并返回先前的值1111。
--a
递减先前递减的值(1110)并返回新值1109

因此,表达式的计算结果为:

a = 1111 - 1109 = 2

这里要注意的关键点是,这里只执行静态块,而从未执行初始化块

因此,代码

  static
     {

     } 
执行并给出结果2

您可以删除整个初始化块并运行

public class A{
    static int a = 1111;
    static
    {
        a = a-- - --a;
        System.out.println(a);
    }

    public static void main(String[] args)  {
        System.out.println(a);
    }
然后运行代码。给你同样的输出

到了减量部分

a-- means: Decrement a AFTER evaluating the expression.

--a means: Decrement variable BEFORE evaluating the expression.
因此,行
a=a--a等于

a = 1111 - 1109

'a--递减a并返回以前的值1111'。如果a--递减a,那么它为什么会再次返回1111?因此a--将值设为1110,--a设为1109,但既然a--存在,那么将在下次使用递减的值,而a--将仅为1111?@ArthurEirich后缀递减运算符
a-->/code>递减
a
的值,但返回
a
的上一个值。这就是这个运算符的定义。@Akki619是的,
a--
将返回
a
-1111-的原始值,即使它将其减至1110.@SSH第二个块中是否缺少static关键字或是故意忽略了它是另一个问题。没有static关键字,它是一个实例初始值设定项块,只有在创建类的实例时才会执行。由于从未创建过的实例,因此不会执行它。