CodeGym /Blog Java /Aleatoriu /Eroare de cod de declarație inaccesibil în Java
John Squirrels
Nivel
San Francisco

Eroare de cod de declarație inaccesibil în Java

Publicat în grup
O declarație de cod inaccesibil este o problemă comună printre începătorii Java. Mulți dezvoltatori începători confundă eroarea cu „cod mort” - un alt fenomen legat de Java. Deși cele două sunt similare prin manifestare, există unele diferențe pe care le vom acoperi în această postare. În afară de asta, veți afla care sunt cele mai comune motive pentru care compilatorul dvs. returnează o declarație de cod inaccesibil și veți descoperi câteva remedii ușoare pentru a vă pune codul în funcțiune din nou.

Ce este un cod inaccesibil?

Prin definiție, o instrucțiune inaccesabilă este cea care nu va fi executată de un compilator atunci când rulați cod gata de implementare. O instrucțiune de returnare a codului inaccesibil este de obicei un semn al unei erori logice în cadrul programului. Deși există mai multe motive pentru care ajungeți cu o astfel de declarație, în toate cazurile, codul inaccesibil este redundant, vă aglomera programul și ar trebui evitat cu orice preț.

Cod inaccesibil vs cod mort

În comunitatea de dezvoltare, conceptele de cod „inaccesibil” și „mort” sunt practic sinonime. Cu toate acestea, dacă sunteți captivant când citiți documentația, este posibil să vedeți că liniile directoare de dezvoltare le menționează adesea pe cele două separat. Există vreo diferență între codul mort și codul inaccesibil? Practic, distincția dintre cele două erori este în modul în care compilatorul reacționează la ele. Dacă codul pe care îl introduceți în compilator este inaccesibil , veți primi o eroare de rulare a compilației în notificarea Java. Dacă declarația dvs. este „ cod mort ”, nu vor exista erori de rulare - un dezvoltator va primi următorul avertisment de sistem:

class DeadCode {
    void deadcode_Method(boolean b) {
    System.out.println("Reachable statement");
        if(true) {
        return;
        }
    System.out.println("Unreachable statement"); // dead code
    }
}
Deoarece nu există o eroare directă a compilatorului în cazul codului mort, este mai greu de detectat. Cu toate acestea, dacă urmăriți cu atenție returnările System.out.printIn , prinderea codului mort nu ar trebui să vă provoace probleme.

De ce obțineți declarații de cod inaccesibil

Vestea bună este că este ușor de urmărit cauza problemelor de cod inaccesibil. Există trei motive principale pentru care compilatorul continuă să returneze erori:
  • Declarații de transfer. Dacă vă spargeți codul cu o instrucțiune return, nimic după „return = true” nu va fi executat.
  • Buclă infinită - nici un cod pe care l-ați scris după bucla infinită nu va fi executat, deoarece sistemul va continua să reitereze acțiunea buclei. Astfel, atunci când vă convertiți codul în cod octet, compilatorul va trimite o eroare de cod inaccesibil.
Pentru a vă ajuta să semnalați și să remediați aceste probleme, să le mărim.

Declarații de returnare

O declarație de returnare face parte din grupul de cuvinte cheie Transfer, ceea ce înseamnă că vă încheie metoda. Este util pentru separarea funcțiilor și vă ajută să vă păstrați codul lizibil și curat. Cu toate acestea, deoarece nu puteți adăuga instrucțiuni noi la funcție după return = true, încercarea de a continua funcția după cuvântul cheie vă va da o eroare de compilator „Cod inaccesibil”. Să aruncăm o privire la un exemplu de manipulare greșită „return = true” și la modul în care un compilator reacționează la aceasta.

class GFG {
    public static void main(String args[])
    {
  
        System.out.println("My code will run");
  
        return;
  
        // ironically, this code will never run
        // here’s an unreachable code message a developer gets.
        System.out.println("My code will run");
    }
}
Iată cum va fi afișată o utilizare greșită a declarației de returnare în compilator:

prog.java:11: error: unreachable statement
System.out.println(“My code will run”);
^
1 error
Pentru a consolida ceea ce ați învățat, vă sugerăm să urmăriți o lecție video de la Cursul nostru Java

Declarații de pauză

Instrucțiunile Break sunt un alt tip de cuvinte cheie cu care trebuie să fiți atenți când scrieți funcții Java. Prin definiție, cuvântul cheie break este folosit pentru a termina o buclă. În exemplul de mai jos, pe măsură ce un dezvoltator iese din buclă, el nu va mai putea executa instrucțiunea pe linia 8 - astfel, compilatorul va afișa o eroare de instrucțiune inaccesabilă. Iată un exemplu de cod care va avea ca rezultat o declarație de cod inaccesibil:

public class JavaCodeGeeks
     {
    public static void main(String[] args) {
     for(int i=1;i<5;i++)
        {
        System.out.println(i);
        break;
        System.out.println("Code after break");
        }
    }
}
Privind eroarea din punctul de vedere al compilatorului, veți obține următoarea declarație de eroare.

JavaCodeGeeks.java:8: error: unreachable statement
System.out.println("After break");
                ^
1 error

Continuați declarațiile

Continue este un cuvânt cheie de control al buclei folosit pentru a reitera acțiuni. Ori de câte ori doriți ca execuția unei bucle să înceapă de la zero pe cont propriu, adăugați continuare la codul dvs. Declarația este utilă pentru a ajuta dezvoltatorii să aleagă ce declarații ale buclei doresc să le repete și pe cele pe care nu le-ar pune în iterație. Deși continuare este un cuvânt cheie simplu de utilizat, neînțelegerea completă a modului în care funcționează îi conduce pe dezvoltatori la capcana „codului inaccesibil”. Deoarece, după întâlnirea unei continue, un sistem va reitera bucla, cuvântul cheie nu va putea ajunge la declarațiile care îl urmează. Să spunem că aveți următorul cod:

public class JavaIsFun
{
    public static void main(String[] args) {
        for(int i=0;i<8;i++)
        {
            System.out.println(i);
            if(i==5)
            {
                continue;
                System.out.println("Coding after continue");
            }
        }
    }
}
Sistemul nu va executa instrucțiunea „Codare după continuare” - compilatorul vă va anunța imediat despre aceasta.

JavaIsFun.java:10: error: unreachable statement
                                System.out.println("Coding after continue");

Bucle infinite

Un scenariu care este similar cu exemplele de cazuri de utilizare a cuvintelor cheie „break” și „continue” este cel al unei bucle infinite. Când proiectează o buclă infinită, un dezvoltator ar trebui să-și amintească că nicio declarație după aceasta nu va rula vreodată. Astfel, dacă nu rupeți bucla, tot codul scris după va fi inaccesibil. Iată un exemplu interesant de manipulare greșită a buclei infinite de verificat:

public class JavaCodeGym
{
    public static void main(String[] args) {
        while(true)
        {
            System.out.println("Hey there");
        }
        System.out.println("Nice to see you");
    }
}
Poți ghici unde se ascunde eroarea? Compilatorul îl va indica imediat după ce rulați codul:

//unreachable code statement compiler error
JavaCodeGym.java:10: error: unreachable statement
                System.out.println("Nice to see you");
‘
Deoarece există o buclă infinită înainte de „Îmi pare bine să te văd” , instrucțiunea nu se va executa niciodată și va returna în continuare o eroare de cod inaccesibil.

Concluzie

Pentru a evita codul inaccesibil, trebuie să vă asigurați că există un flux în toate instrucțiunile sistemului. Cele mai multe probleme de cod Java inaccesibil au de-a face cu gestionarea prost a cuvintelor cheie și gestionarea prost a buclelor. La sfârșitul zilei, verificarea codului este singura modalitate încercată și adevărată de a evita greșelile de cod inaccesibile. Nici nu ar trebui să fii descurajat de ei - obiceiul de a crea cod Java fluid vine cu ani de experiență și practică. Așadar, să accesăm IDE-ul și să începem să construim produse software minunate.
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION