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。

  • 相关阅读:
    TCP/IP协议,,OSI的七层参考模型,HTTP请求响应机制
    火狐浏览器缓存导致JS已经改变的ID没改变
    Server.MapPath 出现未将对象引用设置到对象的实例
    线程池发送邮件的方法(向多个用户发送同一邮件)
    用多线程发送邮箱(一次给一个用户发送N封邮件)
    验证文本框输入内容类型是汉字
    名人博客
    tinyget
    内存分析
    Silverlight Forums
  • 原文地址:https://www.cnblogs.com/heaven1025/p/5772646.html
Copyright © 2011-2022 走看看