Dagens Java-begreb

Uopnåelig kode :

Hvert statement i et java-program skal kunne nås, dvs. at hvert statement skal kunne udføres mindst én gang i en af de mulige flows. Hvis en kode ikke kan udføres i nogen af de mulige strømme, kaldes den uopnåelig kode. Uopnåelig kode i java er en kompileringstidsfejl.

Se på følgende eksempel. Prøv at kompilere dette eksempel.

public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){if(b){return;}else{return;}System.out.println("Unreachable Statement"); //Compile Time Error : Unreachable Code}}

I dette eksempel giver linje 14 kompileringstidsfejl : Unreachable Code. Fordi denne erklæring ikke kan nås i nogen af strømmene. Hvis boolean “b” er sandt, vil if-blokken blive udført, og kontrollen vil blive returneret. Hvis boolean “b” er falsk, vil else-blokken blive udført, og kontrollen vil blive returneret. Så i begge strømme kommer kontrollen ikke til linje 14. Den kan fortsat ikke nås. Derfor giver det en kompileringsfejl.

Se på dette eksempel.

public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");return;System.out.println("Unreachable Statement"); //Compile Time Error}}

I dette eksempel har UnreachableCode_method() kun ét flow. Kun i dette flow skal alle udsagn udføres mindst én gang. Men kontrollen vender kun tilbage ved den anden erklæring. Så tredje statement bliver uopnåelig.

Død kode :

Død kode er også uopnåelig kode, men død kode giver ikke fejl ved kompilering. Den giver blot en advarsel.
For eksempel,

public class UnreachableCodeInJava{void UnreachableCode_method(boolean b){System.out.println("Reachable Statement");if(true){return;}System.out.println("Unreachable Statement"); //Dead Code}}

I ovenstående eksempel vil if-blokken altid blive eksekveret, da vi overdrager konstantværdien “true” til den. Så linje 12 bliver uopnåelig. Selv om compileren ikke vil klage over det. Den giver bare en advarsel om, at det er en død kode.

Før nu en lille ændring i ovenstående eksempel. erstat if-blokken med while-blokken.Kompilér det, og se, hvad der sker.

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}}

Dette eksempel giver kompileringsfejl : Unreachable code. Men hvorfor? Hvorfor ændrer compiler sin mening, når den ser while blok? Hvorfor klager den ikke over uopnåelig kode efter if-blokken?

Det skyldes, at reglerne for uopnåelig kode for forskellige blokke som konstruktører, metoder, try, catch, if, for, while osv. er defineret individuelt i Java Language Specification. I henhold til Java-sprogspecifikationen vil det betingede udtryk i If-blokken ikke blive evalueret på kompileringstidspunktet for at afgøre, hvilken kode der ikke kan nås. Derfor vil du ikke få en kompileringstidsfejl i tilfælde af if-blokken. Du kan tjekke reglerne for uopnåelig kode her:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.