Unreachable Code :
Ogni dichiarazione in qualsiasi programma java deve essere raggiungibile, cioè ogni dichiarazione deve essere eseguibile almeno una volta in uno qualsiasi dei possibili flussi. Se un qualsiasi codice non può essere eseguibile in nessuno dei possibili flussi, allora è chiamato codice irraggiungibile. Il codice irraggiungibile in java è un errore di compilazione.
Guardate il seguente esempio. Prova a compilare questo esempio.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){if(b){return;}else{return;}System.out.println("Unreachable Statement"); //Compile Time Error : Unreachable Code}}
In questo esempio, la linea 14 dà errore di compilazione: Codice irraggiungibile. Perché questa dichiarazione non può essere raggiunta in nessuno dei flussi. Se il booleano “b” è vero, allora il blocco if sarà eseguito e il controllo sarà restituito. Se il booleano “b” è falso, allora verrà eseguito il blocco else e verrà restituito il controllo. Quindi, in entrambi i flussi il controllo non arriva alla linea 14. Rimane irraggiungibile. Quindi, dà errore di compilazione.
Guardate questo esempio.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");return;System.out.println("Unreachable Statement"); //Compile Time Error}}
In questo esempio, UnreachableCode_method() ha solo un flusso. Solo in questo flusso, tutte le istruzioni devono essere eseguite almeno una volta. Ma il controllo ritorna solo alla seconda istruzione. Quindi, la terza istruzione diventa irraggiungibile.
Codice morto :
Codice morto è anche codice irraggiungibile, ma il codice morto non dà errore di compilazione. Ti dà solo un avvertimento.
Per esempio,
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");if(true){return;}System.out.println("Unreachable Statement"); //Dead Code}}
Nell’esempio sopra, il blocco if sarà sempre eseguito perché gli stiamo passando il valore costante “true”. Quindi, la linea 12 diventa irraggiungibile. Anche se il compilatore non si lamenterà di questo. Ti dà solo un avvertimento dicendoti che è un codice morto.
Ora, fai una piccola modifica all’esempio precedente.Sostituisci il blocco if con il blocco while.Compila e vedi cosa succede.
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}}
Questo esempio dà errore di compilazione: Codice irraggiungibile. Ma perché? Perché il compilatore cambia idea quando vede il blocco while? Perché non si lamenta del codice irraggiungibile dopo il blocco if?
Questo perché le regole del codice irraggiungibile per diversi blocchi come costruttori, metodi, try, catch, if, for, while ecc. sono definiti individualmente nella specifica del linguaggio Java. Secondo le specifiche del linguaggio Java, l’espressione condizionale del blocco If non sarà valutata in fase di compilazione per decidere il codice irraggiungibile. Questo è il motivo per cui non otterrete un errore di compilazione in caso di blocco if. Potete controllare le regole del codice irraggiungibile qui.