Onbereikbare Code :
Elk statement in een java-programma moet bereikbaar zijn, d.w.z. elk statement moet ten minste eenmaal uitvoerbaar zijn in een van de mogelijke flows. Als een code niet kan worden uitgevoerd in een van de mogelijke stromen, dan heet het onbereikbare code. Onbereikbare code in java is een fout in de compileertijd.
Kijk eens naar het volgende voorbeeld. Probeer dit voorbeeld te compileren.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){if(b){return;}else{return;}System.out.println("Unreachable Statement"); //Compile Time Error : Unreachable Code}}
In dit voorbeeld, lijn 14 geeft compileertijd fout : Unreachable Code. Omdat dit statement in geen van de flows bereikt kan worden. Als boolean “b” waar is, dan zal if blok worden uitgevoerd en controle zal worden teruggegeven. Als boolean “b” false is, dan zal else block worden uitgevoerd en control zal worden geretourneerd. Dus, in beide stromen komt de controle niet naar Lijn 14. Het blijft onbereikbaar. Daarom geeft het een compile time error.
Kijk eens naar dit voorbeeld.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");return;System.out.println("Unreachable Statement"); //Compile Time Error}}
In dit voorbeeld, UnreachableCode_method() heeft slechts een stroom. In deze flow moeten alle statements ten minste één keer worden uitgevoerd. Maar de controle komt pas bij het tweede statement terug. Dus wordt het derde statement onbereikbaar.
Dode code :
Dode code is ook onbereikbare code, maar dode code geeft geen compileertijdfout. Het geeft alleen een waarschuwing.
Bijv.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");if(true){return;}System.out.println("Unreachable Statement"); //Dead Code}}
In het bovenstaande voorbeeld wordt if block altijd uitgevoerd, omdat we er de constante waarde “true” aan geven. Dus, regel 12 wordt onbereikbaar. Hoewel de compiler daar niet over klaagt. Hij geeft alleen een waarschuwing dat het een dode code is.
Nu, maak een kleine wijziging in bovenstaand voorbeeld.Vervang de if blok door while blok.Compileer het en kijk wat er gebeurt.
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}}
Dit voorbeeld geeft een compileertijd fout : Onbereikbare code. Maar waarom? Waarom verandert de compiler van gedachten als hij while block ziet? Waarom klaagt hij niet over onbereikbare code na het if blok?
Dit komt omdat, de regels van onbereikbare code voor verschillende blokken zoals constructors, methods, try, catch, if, for, while etc zijn individueel gedefinieerd in de Java Language Specification. Volgens de Java Taalspecificatie, zal de voorwaardelijke uitdrukking van If blok niet geëvalueerd worden tijdens het compileren om de onbereikbare code te bepalen. Daarom krijg je geen compileertijdfout in het geval van if-blokken. U kunt de regels van onbereikbare code hier controleren.