而(真);循环在不处于 void 中时引发无法访问的代码
我当时在Java中做一些小程序。我知道如果我写while(true);
程序将冻结在这个循环中。如果代码是这样的:
测试 1:
public class While {
public static void main(String[] args) {
System.out.println("start");
while (true);
System.out.println("end");
}
}
编译器向我抛出错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Unreachable code
at While.main(While.java:6)
我不知道这个错误存在。但是我明白为什么它被扔了。当然,第 6 行无法访问,从而导致编译问题。然后我测试了这个:
测试 2:
public class While {
public static void main(String[] args) {
System.out.println("start");
a();
b();
}
static void a() {
while(true);
}
static void b() {
System.out.println("end");
}
}
由于某种原因,程序正常运行(控制台打印“开始”,然后冻结)。编译器无法检查 void a()
的内部,并看到它不可访问。为了确定我试过了:
测试 3:
public class While {
public static void main(String[] args) {
System.out.println("start");
a();
System.out.println("end");
}
static void a() {
while(true);
}
}
结果与测试 2 相同。
经过一些研究,我发现了这个问题。因此,如果括号内的代码是变量,编译器不会引发异常。这是有道理的,但我不认为这同样适用于空洞
。
问:那么,如果 void b()
(Test 2) 和 System.out.println(“end”);
(Test 3) 无法访问,为什么编译器会在 Test 1 中向我抛出错误呢?
编辑:我在C++中尝试了测试1:
#include <iostream>
using namespace std;
int main()
{
cout << "start" << endl;
while(true);
cout << "end" << endl;
return 0;
}
编译器没有抛出任何错误,然后我得到了与测试2和测试3相同的结果。所以我想这是一个java的东西?