Code inaccessible est une erreur, selon le Langage Java Spec.
Pour citer le JLS:
L'idée est qu'il doit y avoir un chemin d'exécution depuis le début de l'constructeur, une méthode, un exemple de l'initialiseur ou d'initialiseur statique qui contient la déclaration de la déclaration elle-même. L'analyse tient compte de la structure des énoncés. Sauf que pour le traitement de tout, faire, et pour les états dont l'état de santé de l'expression a la valeur de la constante true, les valeurs des expressions ne sont pas prises en compte dans l'analyse des flux.
Ce que cela signifie, c'est que l' if
bloc n'est pas pris en compte, car si vous passez par l'un des chemins de l' if
instruction, vous pouvez arriver en final instruction print. Si vous avez modifié votre code:
public void foo() {
System.out.println("Hello");
if (true)
return;
else
return;
System.out.println("World!");
}
puis, soudain, il ne compile pas plus, car il n'y a pas de chemin par le biais de l' if
déclaration qui permettrait à la dernière ligne pour être atteint.
C'est une application conforme compilateur n'est pas autorisé à compiler votre premier fragment de code. Pour de plus amples citer le JLS:
Par exemple, la déclaration suivante des résultats dans une erreur de compilation:
while (false) { x=3; }
parce que l'instruction x=3; est pas accessible; mais la superficiellement cas similaire:
if (false) { x=3; }
n'entraîne pas une erreur de compilation. Un compilateur optimisant peut se rendre compte que l'instruction x=3; ne sera jamais exécutée et peut choisir d'omettre le code pour que la déclaration de la classe générée fichier, mais l'instruction x=3; n'est pas considéré comme "inaccessible" dans le sens technique spécifiée ici.
Le deuxième avertissement que Eclipse donne, à propos de code mort, est un avertissement généré par le compilateur, qui n'est pas "inaccessible", selon le JLS, mais dans la pratique. C'est l'une des peluches style de vérifier que Eclipse fournit. C'est totalement facultatif, et, à l'aide de la configuration Eclipse, peut être désactivé, ou transformé en une erreur de compilation au lieu d'un avertissement.
Ce second bloc est une "odeur de code", if (false)
des blocs sont en règle générale mis à désactiver le code à des fins de débogage, de l'avoir laissé derrière est généralement accidentelle, et donc l'avertissement.
En fait, Eclipse n'est même plus avancé des tests pour déterminer les valeurs possibles d'une instruction if pour déterminer si oui ou non il est possible de prendre deux chemins. Par exemple, Eclipse serait se plaignent aussi de la mort de code dans la méthode suivante:
public void foo() {
System.out.println("Hello");
boolean bool = Random.nextBoolean();
if (bool)
return;
if (bool || Random.nextBoolean())
System.out.println("World!");
}
Il va générer un code inaccessible pour la seconde si l'instruction, car il peut raison qu' bool
ne doivent l'être qu' false
à ce point dans le code. Dans un court fragment de code, il est évident que les deux si les déclarations sont tester la même chose, mais si il y a 10-15 lignes de code dans le milieu, il pourrait ne pas être si évident plus.
Donc en résumé, la différence entre les deux: l'un est interdit par la JLS, et l'un ne l'est pas, mais est détecté par Eclipse en tant que service pour le programmeur.