Apprenez à identifier le code mort et le code inaccessible en Java. Il peut être demandé dans votre interview Java problèmes de codage comme un puzzle.
Dead code and unreachable code errors
Pour faire concept de code mort, dans ce puzzle, j’ai donné un morceau de code ci-dessous. Essayez d’identifier les problèmes dans le code, s’il est compilé dans l’IDE eclipse.
Je donne la réponse du puzzle ci-dessus dans la section suivante, mais je vous recommande d’essayer d’abord vous-même. C’est pour le plaisir seulement.
Solution – Il a un code mort
Nous avons tous dû être confrontés à des erreurs de compilation liées au « code inaccessible » et certains peuvent avoir remarqué « l’avertissement de code mort ». Le puzzle ci-dessus est lié à eux seulement.
Dans la première méthode howToDoInJava_method1()
, la deuxième déclaration d’impression est inatteignable, donc le compilateur se plaint pour des raisons oubliées.
Dans la deuxième méthode howToDoInJava_method2()
, la deuxième déclaration d’impression est également inatteignable, mais l’étrange compilateur ne fait que vous avertir. Nous essaierons plus tard d’obtenir la logique ici.
Dans la troisième méthode howToDoInJava_method3()
aussi, la deuxième instruction d’impression est inatteignable, donc le compilateur se plaindra encore.
Pourquoi !!
Qu’est-ce que le code mort
Le code inatteignable dans la méthode 2 est appelé « code mort ». C’est purement une erreur signalée par le compilateur Eclipse, et si vous compilerez la classe ci-dessus avec « javac », le compilateur intégré de Java se plaindra seulement pour les deux autres méthodes. .
Citation de la spécification du langage Java –
« L’idée est qu’il doit y avoir un chemin d’exécution possible depuis le début du constructeur, de la méthode, de l’initialisateur d’instance ou de l’initialisateur statique qui contient la déclaration jusqu’à la déclaration elle-même. L’analyse tient compte de la structure des déclarations.
Sauf pour le traitement spécial des déclarations
while
,do
etfor
dont l’expression de condition a la valeur constante true, les valeurs des autres expressions ne sont pas prises en compte dans l’analyse du flux ».
Ce que cela signifie, c’est que le bloc 'if'
n’est pas pris en compte lors de la détermination du code inaccessible. Puisque si vous passez par l’un des chemins de l’instruction 'if'
, vous pourriez atteindre la deuxième instruction print. Tout dépend du compilateur qui détermine cela pendant la compilation.
Dans les deux autres déclarations, le compilateur a déterminé l’inatteignabilité donc il se plaint avec une erreur.
Si nous réécrivons la deuxième méthode à nouveau comme ceci.
public void howToDoInJava_method2() {System.out.println("how to do");if (true) {return;}else{return;}System.out.println("in java");}
Maintenant, le compilateur détermine qu’en aucun cas il ne peut atteindre la dernière déclaration d’impression, donc 'javac'
signale à nouveau le code inatteignable pour cette deuxième méthode également.