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()
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