Învățați să identificați codul mort și codul de neatins în Java. Acesta poate fi întrebat în problemele de codare de la interviul Java sub formă de puzzle.
Erorile de cod mort și de cod inaccesibil
Pentru a face conceptul de cod mort, în acest puzzle, am dat o bucată de cod mai jos. Încercați să identificați problemele din cod, dacă acesta este compilat în eclipse IDE.
În secțiunea următoare dau răspunsul la puzzle-ul de mai sus, dar v-aș recomanda să încercați mai întâi singuri. Este doar pentru distracție.
Soluție – Are cod mort
Toți trebuie să ne fi confruntat cu erori de compilare legate de „Cod inaccesibil” și unii poate au observat „avertismentul de cod mort”. Enigma de mai sus este legată doar de acestea.
În prima metodă howToDoInJava_method1()
, a doua instrucțiune de tipărire este inaccesibilă, astfel încât compilatorul se va plânge din motive de neuitat.
În a doua metodă howToDoInJava_method2()
, a doua instrucțiune de tipărire este, de asemenea, inaccesibilă, dar compilatorul ciudat doar vă avertizează. Vom încerca mai târziu să înțelegem logica de aici.
În a treia metodă howToDoInJava_method3()
, de asemenea, a doua instrucțiune de tipărire este de neatins, deci compilatorul se va plânge din nou.
De ce!!!
Ce este codul mort
Codul neatractabil din metoda 2 se numește „Cod mort”. Aceasta este pur și simplu o eroare raportată de compilatorul Eclipse, iar dacă veți compila clasa de mai sus cu „javac”, compilatorul încorporat Java se va plânge doar pentru celelalte două metode. .
Citat din specificația limbajului Java –
„Ideea este că trebuie să existe o cale de execuție posibilă de la începutul constructorului, metodei, inițializatorului de instanță sau inițializatorului static care conține instrucțiunea până la instrucțiunea însăși. Analiza ia în considerare structura instrucțiunilor.
Cu excepția tratamentului special al instrucțiunilor
while
,do
șifor
a căror expresie de condiție are valoarea constantă true, valorile altor expresii nu sunt luate în considerare în analiza fluxului.”
Ceea ce înseamnă, este că blocul 'if'
nu este luat în considerare la determinarea codului inaccesibil. Deoarece dacă treci prin una dintre căile de acces ale instrucțiunii 'if'
, ai putea ajunge la a doua instrucțiune print. Totul depinde de compilator, care determină acest lucru în timpul compilării.
În celelalte două declarații, compilatorul a determinat imposibilitatea de acces, astfel încât se plânge de eroare.
Dacă rescriem din nou a doua metodă astfel.
public void howToDoInJava_method2() {System.out.println("how to do");if (true) {return;}else{return;}System.out.println("in java");}
Acum, compilatorul determină că nu se poate ajunge în nici un fel la ultima declarație de imprimare, astfel încât 'javac'
raportează din nou cod imposibil de accesat și pentru această a doua metodă.
.