Code inatteignable :
Chaque déclaration dans tout programme java doit être atteignable c’est-à-dire que chaque déclaration doit être exécutable au moins une fois dans l’un des flux possibles. Si un code ne peut pas être exécutable dans l’un des flux possibles, alors il est appelé code inatteignable. Le code inatteignable en java est une erreur de compilation.
Regardez l’exemple suivant. Essayez de compiler cet exemple.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){if(b){return;}else{return;}System.out.println("Unreachable Statement"); //Compile Time Error : Unreachable Code}}
Dans cet exemple, la ligne 14 donne une erreur de temps de compilation : Code inaccessible. Parce que cette déclaration ne peut être atteinte dans aucun des flux. Si le booléen « b » est vrai, alors le bloc if sera exécuté et le contrôle sera retourné. Si le booléen « b » est faux, alors le bloc else sera exécuté et le contrôle sera renvoyé. Ainsi, dans les deux flux, le contrôle n’arrive pas à la ligne 14. Elle reste inaccessible. Par conséquent, il donne une erreur de compilation.
Regardez cet exemple.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");return;System.out.println("Unreachable Statement"); //Compile Time Error}}
Dans cet exemple, UnreachableCode_method() a seulement un flux. Dans ce seul flux, toutes les déclarations doivent être exécutées au moins une fois. Mais, le contrôle est retourné à la deuxième déclaration seulement. Donc, la troisième déclaration devient inaccessible.
Dead Code :
Le code mort est aussi un code inaccessible, mais le code mort ne donne pas d’erreur de compilation. Il vous donne juste un avertissement.
Par exemple,
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");if(true){return;}System.out.println("Unreachable Statement"); //Dead Code}}
Dans l’exemple ci-dessus, le bloc if sera toujours exécuté car nous lui passons la valeur constante « true ». Ainsi, la ligne 12 devient inaccessible. Bien que le compilateur ne se plaindra pas à ce sujet. Il vous donne juste un avertissement disant que c’est un code mort.
Maintenant, faites une petite modification à l’exemple ci-dessus.Remplacez le bloc if par le bloc while.Compilez-le et voyez ce qui se passe.
public class UnreachableCodeInJava{static void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");while(true){return;}System.out.println("Unreachable Statement"); //Compile Time Error}}
Cet exemple donne une erreur de compilation : Code inaccessible. Mais pourquoi ? Pourquoi le compilateur change-t-il d’avis quand il voit le while block ? Pourquoi il ne se plaint pas du code inatteignable après le bloc if… ?
C’est parce que,Les règles du code inatteignable pour différents blocs comme les constructeurs, les méthodes, try, catch, if, for, while etc sont définies individuellement dans la spécification du langage Java. Selon la spécification du langage Java, l’expression conditionnelle du bloc If ne sera pas évaluée au moment de la compilation pour décider du code inaccessible. C’est pourquoi vous n’obtiendrez pas d’erreur de compilation dans le cas du bloc if. Vous pouvez vérifier les règles du code inatteignable ici.