zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    692. 前K个高频单词
    准备工作:更新代码和运行环境
    1319. 连通网络的操作次数——并查集
    <leetcode c++>25. K 个一组翻转链表
    织梦dedecms手机站关闭自动生成首页index.html
    IIS7 IIS7.5 伪静态 web.config 配置方法不带WWW的301跳转到带WWW
    win7和xp一样有左下角显示桌面快捷方式
    Win7系统传真与扫描功能无法使用的处理方法
    织梦dedecms将列表页重复的第一页去除的方法
    秦岭土蜂蜜价格 秦岭土蜂蜜多少钱一斤
  • 原文地址:https://www.cnblogs.com/heaven1025/p/5772646.html
Copyright © 2011-2022 走看看