Aprenda a identificar código morto e código inacessível em Java. Pode ser perguntado em sua entrevista Java problemas de codificação como um quebra-cabeça.
Dead code and unreachable code errors
Para fazer conceito de código morto, neste quebra-cabeça, eu dei um pedaço de código abaixo. Tente identificar os problemas no código, se ele for compilado no eclipse IDE.
Estou dando a resposta do enigma acima na próxima seção, mas eu recomendaria que você tentasse primeiro. É apenas por diversão.
Solução – Tem código morto
Todos nós devemos ter enfrentado erros de compilação relacionados com “código inalcançável” e alguns podem ter notado “aviso de código morto”. Above puzzle is related to them only.
In first method howToDoInJava_method1()
, second print statement is unreachable, so compiler will complain for oblivious reasons.
In second method howToDoInJava_method2()
, second print statement is also unreachable, but strange compiler only warns you. Mais tarde vamos tentar obter a lógica aqui.
No terceiro método howToDoInJava_method3()
também, a segunda declaração de impressão não é acessível, então o compilador irá reclamar novamente.
Porquê !!
O que é código morto
O código inacessível no método 2 é chamado de “Código morto”. Este é puramente um erro reportado pelo compilador Eclipse, e se você compilar acima da classe com “javac”, o compilador inbuilt Java só irá reclamar para outros dois métodos. .
Quote da especificação da linguagem Java –
“A idéia é que deve haver algum caminho de execução possível desde o início do construtor, método, inicializador de instância ou inicializador estático que contenha a instrução para a própria instrução. A análise leva em conta a estrutura das instruções.
Exceto pelo tratamento especial de
while
,do
, efor
comandos cuja expressão de condição tem o valor constante verdadeiro, os valores de outras expressões não são levados em conta na análise de fluxo”.
O que isso significa, é que 'if'
bloco não é levado em conta ao determinar código inalcançável. Como se você passar por um dos caminhos da instrução 'if'
, você pode chegar à segunda instrução de impressão. Tudo depende do compilador que determina isso durante o tempo de compilação.
Em outras duas instruções, o compilador determinou a inatingibilidade, então ele reclama com erro.
Se reescrevermos o segundo método novamente assim.
public void howToDoInJava_method2() {System.out.println("how to do");if (true) {return;}else{return;}System.out.println("in java");}
Agora, o compilador determina que de nenhuma maneira ele pode chegar à última instrução de impressão, então 'javac'
novamente relata código inatingível para este segundo método também.