Je faisais quelques petits programmes en java. Je sais que si j'écris while(true);
le programme va geler dans cette boucle. Si le code est comme ça:
Test 1:
public class While {
public static void main(String[] args) {
System.out.println("start");
while (true);
System.out.println("end");
}
}
Le compilateur me lance le message d'erreur:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Unreachable code
at While.main(While.java:6)
Je ne savais pas que cette erreur existe. Mais j'ai pourquoi il est jeté. Bien sûr, la ligne 6 a été inaccessible, provoquant un problème de compilation. Puis je l'ai testé ceci:
Test 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");
}
}
Pour certaines raisons le programme s'est déroulé normalement (La console imprimé "démarrer" puis gelé). Le compilateur n'a pas pu vérifier à l'intérieur de l' void a()
et de voir qu'il n'est pas joignable. Pour être sûr que j'ai essayé:
Test 3:
public class While {
public static void main(String[] args) {
System.out.println("start");
a();
System.out.println("end");
}
static void a() {
while(true);
}
}
Même résultat que le Test 2.
Après quelques recherches, j'ai trouvé cette question. Donc, si le code à l'intérieur des parenthèses est une variable, le compilateur ne jetez pas l'exception. Cela fait sens, mais je ne pense pas que la même chose s'applique voids
.
Q: pourquoi le compilateur juste de me jeter à l'erreur au Test 1, si void b()
(Test 2) et System.out.println("end");
(Test 3) n'est pas joignable?
EDIT: j'ai essayé de Test 1 en C++:
#include <iostream>
using namespace std;
int main()
{
cout << "start" << endl;
while(true);
cout << "end" << endl;
return 0;
}
Le compilateur n'a pas de jeter des erreurs, puis j'ai obtenu le même résultat que le Test 2 et 3. Test de Donc je suppose que c'est une java chose?