Teme-te de erori, dar nu le scrie în Java! Probabil că știți deja câteva lucruri despre excepții în Java . Astăzi, măcar o cunoaștere superficială vă va aduce beneficii. Vom analiza clasa Error și un tip special de excepție care sperie mulți oameni atunci când apare în urmele lor de stivă.

În partea de sus a ierarhiei excepțiilor Java se află clasa Throwable , care are doi descendenți:

  • Excepție , care este responsabilă pentru erorile din programul dvs.
  • Și eroul nostru de astăzi - Error , care este responsabil pentru erorile din JVM.
    Merită menționat că acestea probabil nu sunt nici măcar erori de codare, ci mai degrabă probleme care de obicei nu depind de dezvoltator.

Ce să faci cu o eroare

Când prindeți „erori”, nu puteți efectua nicio acțiune în blocul catch , cu excepția înregistrării , deoarece vorbim despre probleme în JVM-ul în sine.

Înregistrarea este bună: când primiți o eroare de rulare, puteți să vă uitați la jurnalele, să vedeți cauza și să știți ce să remediați.

Deoarece nu știți ce fel de eroare ați putea primi când scrieți codul, nu are sens să scrieți un anumit tip în blocul catch . Utilizarea clasei Error în sine nu este, de asemenea, cea mai bună soluție, deoarece în acest caz, veți detecta doar erori.

În consecință, este mai bine să utilizați clasa Throwable , care poate prinde atât Error , cât și Exception . Cum arată asta în practică?

Nu este în regulă să scrii cod astfel:

try {
    // Your code
} catch (OutOfMemoryError outOfMemoryError) {
    // Code to catch OutOfMemoryError
}
Scrierea unui cod ca acesta nu este, de asemenea, ok:

try {
    // Your code
} catch (Error error) {
    // Code to catch all Errors
}
Dar codul ca acesta este OK:

try {
    // Your code
} catch (Throwable throwable) {
    // Code to catch all Throwables
}

A doua opțiune pentru gestionarea erorilor este să le aruncați mai sus după declararea unei clauze throws pe metodă. Această tehnică este utilizată atunci când codul dvs. ar putea arunca teoretic o eroare și doriți să preveniți pe toți cei care ar putea folosi codul dvs., astfel încât să poată gestiona corect eroarea.

Erori comune

Unele dintre cele mai populare erori sunt clasele OutOfMemoryError și StackOverflowError .

OutOfMemoryError apare adesea atunci când programul nu are suficientă memorie pentru a crea obiecte și colectorul de gunoi nu poate ține pasul. Rezultatul este un OutOfMemoryError .

Java nu vă permite să ștergeți manual obiecte pentru a preveni scurgerile de memorie, dar puteți evita aruncarea gunoiului pentru a nu suprasolicita colectorul de gunoi și pentru a nu aglomera grămada.

De exemplu, un cod ca acesta va crea o mulțime de gunoi în memorie:


while (true) {
    new Object();
}

A doua eroare despre care vreau să vă spun este StackOverflowError , care este aruncată atunci când stiva depășește. Deoarece stiva stochează în principal variabile locale, parametri și apeluri de metodă, recursiunea (sau un apel recursiv de metodă) este o cauză foarte comună a acestei erori:


public void foo() {
    foo();
}

Pentru a evita problemele în timpul execuției programului, IDE-urile moderne avertizează adesea despre apelarea metodelor recursiv.

Nu puteți remedia un program care afișează erori , dar puteți scrie cod care nu va genera o eroare și nu vă va întrerupe programul. Urmăriți ce faceți cu memoria, creați obiecte cu atenție și apelați corect metodele. Dacă faci asta, atunci vei avea mai puține probleme în codul tău.

Diferența dintre tipurile de eroare și excepție

Eroare Excepție
Nu poate fi corectat în blocul de prindere Poate fi manevrat într-un bloc de prindere
Nu apare la momentul compilarii Poate fi prins în timpul compilării
Probleme în JVM Probleme în logica codului
Toate erorile sunt debifate verificat și nebifat

Nu puteți scăpa de excepții în Java, dar nu ar trebui să vă fie frică de ele. Trebuie doar să înțelegeți ce reprezintă fiecare tip și să știți cum să îl gestionați. Asta e tot pentru azi! Te văd!