„Java“ išimčių tvarkymas yra viena iš veiksmingų būdų tvarkyti vykdymo klaidas, kad būtų galima išsaugoti reguliarų programos srautą. Ji tvarko vykdymo klaidas, tokias kaip NullPointerException ArrayIndexOutOfBoundsException ir tt Kad efektyviai tvarkytų šias klaidas, Java pateikia du raktinius žodžius mesti ir išmesti.
Java metimas
„Java“ raktinis žodis mesti naudojamas norint aiškiai išmesti išimtį iš metodo ar bet kurio kodo bloko. Galime mesti pažymėtą arba nepažymėtą išimtį. Raktinis žodis mesti dažniausiai naudojamas tinkintoms išimtims mesti.
Sintaksė:
mesti Pavyzdys
Kai egzempliorius yra Throwable tipo objektas (arba jo poklasiai, pvz., Išimtis).
Pavyzdys:
mesti naują ArithmeticException('/ by zero');
Tačiau ši išimtis, ty egzempliorius, turi būti tipo Metamas arba poklasis Metamas .
Programos vykdymo eiga sustoja iš karto po to, kai įvykdomas metimo sakinys ir artimiausias uždarymas pabandyk blokas patikrinamas, ar jame yra a sugauti teiginys, atitinkantis išimties tipą. Jei jis randa atitiktį, kontroliuojamas, perkeliamas į tą teiginį, kitaip pridedamas kitas pabandyk blokas patikrinamas ir pan. Jei nėra atitikimo sugauti randama, tada numatytasis išimčių tvarkytuvas sustabdys programą.
pelė ir pelės tipai
Pavyzdys: Šiame pavyzdyje parodyta, kur metodo viduje sugaunama ir išmetama išimtis.
Javaclass Geeks { static void fun() { try { throw new NullPointerException('demo'); } catch (NullPointerException e) { System.out.println('Caught inside fun().'); throw e; // rethrowing the exception } } public static void main(String args[]) { try { fun(); } catch (NullPointerException e) { System.out.println('Caught in main.'); } } }
Išvestis
Caught inside fun(). Caught in main.
Paaiškinimas: Aukščiau pateiktame pavyzdyje parodytas raktinio žodžio mesti naudojimas norint aiškiai mesti NullPointerException. Išimtis yra sugauta viduje smagu () metodą ir iš naujo išmesti ten, kur jis pagaunamas naudojant main() metodą.
Pavyzdys: Šis pavyzdys parodo aritmetinę išimtį.
Java// Throwing an arithmetic exception class Geeks { public static void main(String[] args){ int numerator = 1; int denominator = 0; if (denominator == 0) { // Manually throw an ArithmeticException throw new ArithmeticException('Cannot divide by zero'); } else { System.out.println(numerator / denominator); } } }
Išvestis:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
Paaiškinimas: Aukščiau pateiktame pavyzdyje parodyta išimtis naudojant metimą, kai Aritmetinė išimtis yra aiškiai išmesta dėl dalybos iš nulio.
Java metimai
metimai yra Java raktinis žodis, naudojamas metodo paraše, nurodant, kad šis metodas gali sukelti vieną iš išvardytų tipo išimčių. Šių metodų skambinantis asmuo turi tvarkyti išimtį naudodamas „try-catch“ bloką.
Sintaksė:
tipo metodo_pavadinimas(parametrai) meta išimties_sąrašas
kur išimtis_sąrašas yra kableliais atskirtas visų išimčių, kurias metodas gali mesti, sąrašas.
Programoje, jei yra galimybė iškelti išimtį, kompiliatorius visada mus apie tai įspėja ir mes privalome tvarkyti tą pažymėtą išimtį Priešingu atveju gausime kompiliavimo laiko klaidą, kad nepranešta išimtis XXX turi būti sugauta arba paskelbta išmesta. Norėdami išvengti šios kompiliavimo laiko klaidos, išimtį galime tvarkyti dviem būdais:
- Naudodami pabandykite sugauti
- Naudodami metimai raktažodį
Mes galime naudoti raktinį žodį metimai, norėdami perduoti atsakomybę už išimčių tvarkymą skambinančiajam (tai gali būti metodas arba JVM), tada skambintojo metodas yra atsakingas už šios išimties tvarkymą.
1 pavyzdys: netvarkoma išimtis
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Išvestis:
error: unreported exception InterruptedException; must be caught or declared to be thrownPaaiškinimas: Aukščiau pateiktoje programoje gauname kompiliavimo laiko klaidą, nes yra išimtis, jei pagrindinė gija užmigo, kitos gijos gauna galimybę vykdyti main() metodą, kuris sukels InterruptedException.
2 pavyzdys: naudojimas throws tvarkyti išimtis
log4jJava
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Išvestis:
Hello GeeksPaaiškinimas: Aukščiau pateiktoje programoje naudodami raktinį žodį metimai tvarkėme PertrauktaIšimtis ir išvestį gausime kaip Sveiki Geekai.
3 pavyzdys: Išimties išmetimas suthrows
class Geeks { static void fun() throws IllegalAccessException { System.out.println('Inside fun(). '); throw new IllegalAccessException('demo'); } public static void main(String args[]) { try { fun(); } catch (IllegalAccessException e) { System.out.println('Caught in main.'); } } }
Išvestis
Inside fun(). Caught in main.
Paaiškinimas: Aukščiau pateiktame pavyzdyje iš metodo išmetama Neteisėtos prieigos išimtis ir ji naudojama pagrindiniame metode naudojant „try-catch“ bloką.
Skirtumas tarp metimų ir metimų
Pagrindiniai „Java“ metimo ir metimo skirtumai yra šie:
mesti | metimai |
|---|---|
Jis naudojamas norint aiškiai nurodyti išimtį. | Jis naudojamas deklaruoti, kad metodas gali sukelti vieną ar daugiau išimčių. |
Jis naudojamas metodo arba kodo bloko viduje. | Jis naudojamas metodo paraše. |
Jis gali mesti ir pažymėtas, ir nepažymėtas išimtis. | Jis naudojamas tik pažymėtoms išimtims. Nepažymėtos išimtys nereikalingos metimai |
Metodas arba blokas daro išimtį. | Metodo skambinantis asmuo yra atsakingas už išimties tvarkymą. sąrašo mazgas java |
Nedelsiant sustabdo dabartinį vykdymo srautą. | Tai verčia skambinantįjį tvarkyti paskelbtas išimtis. |
mesti naują ArithmeticException('Klaida'); | public void myMethod() išmeta IOException {} |