JAVA:为什么eclipse将我的第二个else-if语句称为“死代码”?

时间:2019-03-21 13:57:00

标签: java eclipse if-statement

我正在Eclipse IDE上用JAVA编写代码,并且if-else语句遇到问题。在我的第三个外部“ if”中,我有两个“ else-if”块,Eclipse正在将我的第二个“ else-if”调用为无效代码并跳过它-我使用Eclipse调试器对其进行了检查,但我不知道为什么。 Eclipse一直建议我删除第二条else-if语句,这将大大改变我的代码。

请让我知道我是否可以添加其他信息,并在此先感谢所有帮助!

这是代码:

public static void eachCycleUni (Queue processes, int numProcesses, Process[] allProcesses, Process[] original) {   
    Queue<Process> readyProcesses = new LinkedList<Process>();      //Stores processes that are ready

    for (int p = 0; p < allProcesses.length; p++) {
        Process currentProcess = allProcesses[p];
        while (terminatedProcesses != numProcesses) {
            //Nothing --> Nothing or Nothing --> currentRunning
            if (currentRunning == null && currentBlocked == null) {
                ....
            }
            //currentRunning --> --, or currentRunning --> currentBlocked, or currentRunning --> terminated
            else if (currentRunning.CPUburstRemaining != 0 && currentBlocked == null) {
                ...
            }
            //THIS ELSE-IF
            else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) {
                ...
            }
            cycleNumber++;
        }
    }
}

1 个答案:

答案 0 :(得分:5)

相关的if和else-if检查是:

if (currentRunning == null && currentBlocked == null) {
   ...
}
else if (currentRunning.CPUburstRemaining != 0 && currentBlocked == null) {
   ...
}
else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) {
   ...
}

您的第一个if-check将检查currentRunningcurrentBlocked都是null

如果不是这种情况,则将检查currentBlocked是否为null,并隐式使用currentRunning.CPUburstRemaining意味着currentRunning不能为null(否则,{ {1}}会被给出)。

因此,经过这两次检查,我们知道NullPointerException再也不能成为currentRunning了,因为它要么进入了第一个null语句,要么给出了{{1 }}在第一个if块的NullPointerException处。

因此,您currentRunning.CPUburstRemaining中的else if部分将 总是 为假,因此IDE将此视为无效代码。< / p>