Java compile时,提示 DeadCode的原因

在工程编译时,编译器发现部分代码是无用代码,则会提示:某一行代码是DeadCode。今天compile工程的时候发现某一个循环出现这个问题,如下:

    public void mouseOver(final String[] xpathArray) {
        final int browserType = GlobalSettings.browserCoreType;
        // Selenium doesn't support the Safari browser
        if (browserType == 4) {
            Assert.fail("Mouseover is not supported for Safari now");
            Assert.fail("Incorrect browser type");
        }

        pause(pause);
        Robot rb = null;
        try {
            rb = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
        rb.mouseMove(0, 0);
        try {
            webDriverWait.until(new ExpectedCondition<Boolean>() {
                @Override
                public Boolean apply(WebDriver driver) {
                    Boolean flag = false;
                    for (String xpath : xpathArray) {
                        WebElement we = findElement(xpath);
                        
                        if (browserType == 2 || browserType == 5 || browserType == 6) {
                            try {
                                Actions builder = new Actions(browserCore);
                                builder.moveToElement(we).build().perform();
                                flag = true;
                                break;
                            } catch (Exception e) {
                                logger.error("Failed to mouseover " + xpath, e);
                                flag = false;
                                handleFailure(e.getMessage());
                            }
                            logger.info("Mouseover " + xpath);
                        } else if (browserType == 1 || browserType == 3) {
                            try {
                                for (int i = 0; i < 5; i++) {//DeadCode
                                    Actions builder = new Actions(browserCore);
                                    builder.moveToElement(we).build().perform();
                                    logger.info("Mouseover " + xpath);
                                    flag = true;
                                    break;
                                }
                            }catch (Exception e) {
                                logger.error("Failed to mouseover " + xpath, e);
                                flag = false;
                                handleFailure(e.getMessage());
                            }
                        }
                    }
                    return flag;
                }
            });
        }catch (Exception e){
            handleFailure(e.getMessage());
        }

分析了下,其实循环部分的第二次就不会再执行了,因编译器已经检查到执行后的flag的状态为true,所以给出了DeadCode的警告。而代码实际运行过程中也确实不会执行第二次。

 举个例子:

if(true && true){
    System.out.println("这里会一直被执行");
}else{
    System.out.println("这里一直不会被执行");   
}

上例中,因compiler 已经判定if的结果只会为true,所以else中的语句永远不会被执行,因此else中为DeadCode。

 

无法预判的语句

Boolean a = true;
Boolean b = true;
if(a && b){
   System.out.println("这里会一直被执行");
}else{
   System.out.println("这里一直不会被执行");
}

上例中,由于a 和 b是2个变量,编译器编译时,无法预判if的结果是true,因此不会警告else的内容为DeadCode。

posted @ 2016-08-15 13:45  米朵  阅读(1775)  评论(0编辑  收藏  举报