Nedosažitelný kód :
Každý příkaz v každém java programu musí být dosažitelný, tj. každý příkaz musí být proveditelný alespoň jednou v některém z možných toků. Pokud některý kód nemůže být spustitelný v žádném z možných toků, pak se nazývá nedosažitelný kód. Nedosažitelný kód v jazyce java je chyba v době kompilace.
Podívejte se na následující příklad. Zkuste tento příklad zkompilovat.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){if(b){return;}else{return;}System.out.println("Unreachable Statement"); //Compile Time Error : Unreachable Code}}
V tomto příkladu je na řádku 14 chyba času kompilace : Nedosažitelný kód. Protože na tento příkaz nelze dosáhnout v žádném z toků. Pokud je boolean „b“ true, pak se provede blok if a vrátí se řízení. Pokud je boolean „b“ false, pak se provede blok else a vrátí se řízení. V obou tocích se tedy řízení nedostane na řádek 14. Ten zůstává nedosažitelný. Proto dojde k chybě při kompilaci.
Podívejte se na tento příklad.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");return;System.out.println("Unreachable Statement"); //Compile Time Error}}
V tomto příkladu má funkce UnreachableCode_method() pouze jeden tok. Pouze v tomto toku musí být všechny příkazy provedeny alespoň jednou. Řízení se však vrací až při druhém příkazu. Třetí příkaz se tedy stává nedosažitelným.
Mrtvý kód :
Mrtvý kód je také nedosažitelný kód, ale mrtvý kód nevyvolává chybu při kompilaci. Dává pouze varování.
Například,
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");if(true){return;}System.out.println("Unreachable Statement"); //Dead Code}}
V uvedeném příkladu se blok if provede vždy, protože mu předáváme konstantní hodnotu „true“. Řádek 12 se tedy stane nedosažitelným. Přestože si na to překladač nebude stěžovat. Pouze vydá varování, že se jedná o mrtvý kód.
Nyní proveďte malou úpravu výše uvedeného příkladu: Nahraďte blok if blokem while. zkompilujte jej a uvidíte, co se stane.
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}}
Tento příklad dává chybu při kompilaci : Nedostupný kód. Ale proč? Proč kompilátor změní názor, když vidí blok while? Proč si nestěžuje na nedosažitelný kód po bloku if?“
Je to proto,že pravidla nedosažitelného kódu pro různé bloky, jako jsou konstruktory, metody, try, catch, if, for, while atd. jsou definována individuálně ve specifikaci jazyka Java. Podle Specifikace jazyka Java se podmíněný výraz bloku If při kompilaci nevyhodnocuje, aby se rozhodlo o nedosažitelném kódu. Proto v případě bloku if nedojde k chybě při kompilaci. Pravidla pro nedosažitelný kód si můžete prohlédnout zde:
.