Java 有人能解释一下为什么在执行初始化块后跳过方法-methodOfTest()?

Java 有人能解释一下为什么在执行初始化块后跳过方法-methodOfTest()?,java,Java,执行流程为: 静态块 初始化块 然后是methodfOfTest() 当内存分配发生时,执行初始化块,i值为-2。但根据我的说法,当执行methodfOfTest()时,i值应该是1。但它显示的是-2,即初始化块的i值 谁能告诉我怎么做 首先,这段代码中有一个错误 System.out.println(“new UnaryOp().methodOfTest());//当执行i=1时,结果如何为i=-2 因为您添加了不必要的报价 是的,执行流程是正确的 静态块 初始化块 methodfOfTe

执行流程为:

  • 静态块
  • 初始化块
  • 然后是methodfOfTest()
当内存分配发生时,执行初始化块,i值为-2。但根据我的说法,当执行methodfOfTest()时,i值应该是1。但它显示的是-2,即初始化块的i值

谁能告诉我怎么做

  • 首先,这段代码中有一个错误

    System.out.println(“new UnaryOp().methodOfTest());//当执行i=1时,结果如何为i=-2

  • 因为您添加了不必要的报价

  • 是的,执行流程是正确的

    静态块

    初始化块

    methodfOfTest()

  • 当methodOfTest()执行时,i的值为-2

    那么运算符优先级为:

  • *

  • /

  • +

  • -

  • 因此,结果将被评估为(-2*-2)=4,现在是4/-2=-2

    现在-2+-2=-4 表达式变为

    public class UnaryOp {
        static int i=1;
    
        static{
            i= i-- + --i;
            System.out.println(i); // Result comes 0
        }
    
        {
            i=i++ - ++i;
            System.out.println("i valus is" +i); //Result comes -2
        }
    
        int methodOfTest(){
            return i+i - i*i/i;
    
        }
    
        public static void main(String[] args){
            System.out.println("new UnaryOp().methodOfTest()); //How the result comes as i=-2 when executed instead i=1?
    
    
        }
    
    }
    

    此表达式根据运算符优先级进行计算。

    运算符优先级?
    i+i-i*i/i;
    i
    为什么期望1?@usr7587773了解如何调试程序是一个好主意。首先放一些
    println
    语句,看看
    i
    在代码中是如何变化的。让程序我将向您解释发生了什么。原因代码没有执行:它没有编译!!“根据我的说法,
    i
    值应该是1”。为什么?谢谢,我弄错了。我没有假设初始化块和methodfOfTest()之间的连续性。这就是我得到i=1作为答案的原因。这是不正确的。
    -4-(-2)=-2