Oåtkomlig kod :
Alla uttalanden i ett Javaprogram måste vara åtkomliga, dvs. varje uttalande måste kunna exekveras minst en gång i något av de möjliga flödena. Om en kod inte kan exekveras i något av de möjliga flödena kallas den oåtkomlig kod. Oåtkomlig kod i java är ett kompileringsfel.
Se på följande exempel. Försök att kompilera det här exemplet.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){if(b){return;}else{return;}System.out.println("Unreachable Statement"); //Compile Time Error : Unreachable Code}}
I det här exemplet ger rad 14 kompileringsfel : Unreachable Code. Eftersom detta uttalande inte kan nås i något av flödena. Om boolean ”b” är sant, kommer if-blocket att exekveras och kontrollen kommer att returneras. Om boolean ”b” är falsk kommer else-blocket att exekveras och kontrollen returneras. I båda flödena kommer kontrollen alltså inte till rad 14. Den förblir oåtkomlig. Därför ger det ett kompileringsfel.
Klipp på det här exemplet.
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");return;System.out.println("Unreachable Statement"); //Compile Time Error}}
I det här exemplet har UnreachableCode_method() bara ett flöde. I detta flöde måste alla uttalanden utföras minst en gång. Men kontrollen återvänder först vid det andra uttalandet. Så det tredje uttalandet blir otillgängligt.
Död kod :
Död kod är också otillgänglig kod, men död kod ger inte kompileringsfel. Den ger bara en varning.
Till exempel,
public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");if(true){return;}System.out.println("Unreachable Statement"); //Dead Code}}
I exemplet ovan kommer if-blocket alltid att exekveras eftersom vi skickar konstantvärdet ”true” till det. Så rad 12 blir oåtkomlig. Även om kompilatorn inte kommer att klaga på det. Den ger bara en varning som säger att det är en död kod.
Gör nu en liten ändring i exemplet ovan.Ersätt if-blocket med while-blocket.Kompilera det och se vad som händer.
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}}
Det här exemplet ger kompileringsfel : Oåtkomlig kod. Men varför? Varför ändrar kompilatorn sig när den ser while-blocket? Varför klagar den inte på oåtkomlig kod efter if-blocket?
Det beror på att reglerna för oåtkomlig kod för olika block som konstruktörer, metoder, try, catch, if, for, while etc. definieras individuellt i Java Language Specification. Enligt Javas språkspecifikation kommer det villkorliga uttrycket i If-blocket inte att utvärderas vid kompileringstid för att avgöra vilken kod som inte kan nås. Därför kommer du inte att få något kompileringsfel när det gäller if-blocket. Du kan kontrollera reglerna för oåtkomlig kod här:
.