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。

时间: 2024-10-07 20:21:27

Java compile时,提示 DeadCode的原因的相关文章

compile时提示CListCtrl没有声明,为什么这个mfc的类不能直接用?

compile时提示CListCtrl没有声明,为什么这个mfc的类不能直接用? 解决办法: #include <afxcmn.h>

other-关于JAVA安装时提示已安装,是否需要继续安装的问题

有时候在客户的电脑上安装java时,会碰到已安装过java,然后单击form菜单,系统会自动进行JAVA下载,下载完成后,又提示"JVAV已安装,是否继续安装"的问题,反复如此? 目前该问题的产生原因不明了,怀疑是java之前卸载时,没有卸载成功. 解决方案:把java卸载掉,然后安装java 6 update 45 版本,或许可以解决.

linux下vi或vim编辑文件时提示Found a swap file by the name的原因及解决方法

在linux下用vi或vim打开test.java文件时 [[email protected] test]# vi test.java 出现了如下信息: E325: ATTENTION     Found a swap file by the name ".test.java.swp"             owned by: root   dated: Wed Dec  7 13:52:56 2011         file name: /var/tmp/Test.java  

Eclipse运行时提示“Failed to load the JNI shared library /Java/jre6/bin/client/jvm.dll”的一个解决方案

出现这个问题的一个原因是eclipse需要的32位jdk,你的环境变量中配的是64位jdk 于是有人建议,重装个32位的jdk,把环境变量换成32位的jdk,但如果你的其它程序需要64位jdk的话,这肯定不是一个好办法 还有一种方法是在 eclipse根目录下有个eclipse.ini文件,添加个 -vm参数 -vm C:/Java32/jdk1.7.0_45/bin/javaw.exe      //这是我的32位jdk 注意位置 -startup plugins/org.eclipse.eq

eclipse打开时提示:failed to create the java virtual machine

Eclipse打开时提示: failed to create the java virtual machine 原因:C盘空间不够 编辑删除 处理:1.用金山清理临时文件: 2.用金山手机卫士连接真实设备.

hive执行query语句时提示错误:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOException:

hive> select product_id, track_time from trackinfo limit 5; Total MapReduce jobs = 1 Launching Job 1 out of 1 Number of reduce tasks is set to 0 since there's no reduce operator org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOEx

myeclipse 编写java代码提示 dead code 原因

经常使用MyEclipse或Eclipse编辑器编写java代码的程序员,可能经常遇到一个黄线警告提示:dead code:一般程序员遇到这些问题都会置之不理,反正也不影响程序的编译执行.对,这不是bug,只是一个提示,对于一个有强迫症的程序员来说,他非要代码一点问题都没有,包括黄线警告都要消灭掉,这里简单说下dead code 即死代码.无作用的代码提示的原因和解决方法. 顾名思义,死代码,即你编写的那一行是无效代码,可有可无,说白了就是一行废话:这是你就要看一下这一行的处理逻辑是什么,可能是

hive运行query语句时提示错误:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOException:

hive> select product_id, track_time from trackinfo limit 5; Total MapReduce jobs = 1 Launching Job 1 out of 1 Number of reduce tasks is set to 0 since there's no reduce operator org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOEx

连接mysql时提示java.sql.SQLException: Access denied for user &#39;root&#39;@&#39;DESKTOP-N2B2D9A&#39; (using password: YES)

用root连接mysql时提示:访问被拒绝 检查一下mysql server是否开启,发现后台在运行着..  然后查了一下mysql的用户表,发现root只能运行使用本地ip(localhost或者127.0.0.1)进行连接 解决方法:新开一个权限GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'jeffw' WITH GRANT OPTION; 然后查询一下:select * from user; 新开的root的已经开启权限,