当前位置: 首页 > 知识库问答 >
问题:

有关无法访问的语句错误的问题

长孙修远
2023-03-14

给出这段代码,其中包含一个类TestClass及其方法loopTest().这是我们的主要关注点:

public class TestClass{
   public void loopTest(){
      int x = 0;
      loop: for (int i = 1; i < 5; i++){
         for (int j = 1; j < 5; j++){
            System.out.println(i);
            if (x == 0) {  continue loop;  }
            System.out.println(j);
         }
      }
   }
}

在IntelliJ IDEA中运行此代码不会返回任何编译错误,但会成功返回输出。我的问题是:为什么这不是一个不可达的语句?

删除if(x==0)语句后运行循环(但保留继续循环;如下所示:

loop: for (int i = 1; i < 5; i++){
         for (int j = 1; j < 5; j++){
            System.out.println(i);
            continue loop;
            System.out.println(j);
         }
      }

(...)会返回这样的错误,因为最后的< code>sout永远不会被打印出来。为什么第一种情况也不会出现这种情况?我确信这不是运行时的问题,因为编译器肯定看到整数< code>x在方法开始时被初始化,但是循环不会到达第二条语句。

共有1个答案

姬阳曜
2023-03-14

这是因为编译器对分析的深度有限制。

if (false) System.out.println("never");

很好,例如,因为没有检查这些条件。编译器假设条件可以为真,即使这在实践中是不可能的。

无条件的< code>continue 、< code>return 、< code>break之后的代码被认为是不可访问的,无需进一步分析。

较新的语言可以做这种分析,我认为像SonarLint这样的工具也可以找到。即使是运行时的Java也可能会优化代码,但我想Java形式化时静态代码分析的年龄/状态是造成这种行为的原因。

if(false)技巧也是一种相当常见的禁用代码进行快速测试的方法,因此现在添加它可能会破坏很多代码,我想这不太可能作为语言/编译器功能添加,尽管现在它完全可行。

 类似资料:
  • 本文向大家介绍Java中无法访问的语句错误,包括了Java中无法访问的语句错误的使用技巧和注意事项,需要的朋友参考一下 由于多种原因导致无法编译代码时,发生无法访问的代码错误,其中包括:无限循环,无法访问的代码行之前的return语句。 让我们看一个例子- 示例 输出结果 名为Demo的类包含主函数,并定义了一个值,并检查该值并运行空的“ for”循环。如果找到该值,则控件会跳出循环,否则将显示一

  • 问题内容: 我想用此查询执行的操作是:我有一个名为Dept的表,其中包含所有部门名称和ID,具有用户名,部门ID和ID的用户信息。我也有一个名为checkinout的第三个表,该表具有用户ID,并带有时间。 因此,我想(使用部门名称)将Checkinout表中的所有数据从属于该部门的人员那里获取,但是当我尝试该查询时,它给了我一个错误: 我无法解决。我正在使用Acces数据库。 非常感谢您的帮助。

  • 我刚刚开始学习,我的输出似乎接受第二个if语句为真,即使我的输入大于200。我已经在这里呆了几天了,如果这里有人愿意检查我的代码,那对我来说是很好的。 这是我的代码:

  • 遥不可及!更改:false,msg:SSH错误:无法将数据发送到远程主机。确保可以通过ssh访问此主机,“不可访问”:true 主持人: ansible.cfg 我正在使用executeshell运行Jenkins的剧本`

  • 正在尝试将代码更新为Selenium 3。x、 在尝试运行测试时,我不断遇到一个错误: 同样的代码曾经在运行测试时工作,我真的不知道它在哪里或为什么会出现这样一个奇怪的错误。我似乎找不到任何人以前写过的任何东西,所以我希望stackoverflow社区可以帮助我解决这个问题。 以下是生成此错误的代码:

  • 我正在通过 Windows(10) 启动时的批处理文件启动我的应用程序。这是我在批处理文件中的内容 - 当windows启动时,我得到了 无法访问文件.jar 然而,问题是在这个错误消息之后,应用程序仍然在启动中,并且运行良好。正在访问jar但我仍然无法访问jar错误的原因是什么,如何避免它?找不到这个特定案例的任何答案。