Java heittää ja heittää avainsanan

Tässä opetusohjelmassa opimme käyttämään heitto ja heitto -avainsanaa poikkeusten käsittelyyn esimerkkien avulla.

Javassa poikkeukset voidaan luokitella kahteen tyyppiin:

  • Valitsematta Poikkeukset: Niitä ei tarkisteta käännettäessä mutta ajon time.For esimerkki: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, poikkeusten Errorluokka jne
  • Tarkistetut poikkeukset: Ne tarkistetaan kokoamisajankohtana. Esimerkiksi IOException, InterruptedExceptionjne

Katso Java-poikkeukset saadaksesi lisätietoja tarkistetuista ja tarkistamattomista poikkeuksista.

Yleensä meidän ei tarvitse käsitellä tarkistamattomia poikkeuksia. Se johtuu siitä, että tarkistamattomia poikkeuksia tapahtuu ohjelmointivirheiden vuoksi. Ja on hyvä käytäntö korjata ne käsittelyn sijaan.

Tämä opetusohjelma keskittyy nyt tarkastettujen poikkeusten käsittelemiseen käyttämällä throwja throws.

Java heittää avainsanan

Käytämme throwsavainsanaa method-ilmoituksessa ilmoittaaksemme siinä mahdollisesti esiintyvät poikkeukset.

Sen syntaksi on:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Kuten yllä olevasta syntaksista näet, voimme käyttää throwsuseita poikkeuksia.

Esimerkki 1: Java heittää avainsanan

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) ) 

Tuotos

 java.io.FileNotFoundException: test.txt (ei tällaista tiedostoa tai hakemistoa) 

Kun suoritamme tämän ohjelman, jos tiedostoa test.txtei ole, FileInputStreamheittää a, FileNotFoundExceptionjoka laajentaa IOExceptionluokkaa.

Jos menetelmä ei käsittele poikkeuksia, siinä mahdollisesti esiintyvien poikkeusten tyyppi on määriteltävä throwslausekkeessa, jotta puhelupinossa ylhäällä olevat menetelmät voivat käsitellä niitä tai määrittää ne throwsitse avainsanalla.

findFile()Menetelmä määrittää, että IOExceptionvoidaan heittää. main()Metodikutsuja tätä menetelmää ja käsittelee poikkeus, jos se on heitetty.

Useiden poikkeusten heittäminen

Näin voimme heittää useita poikkeuksia throwsavainsanalla.

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

Tässä findFile()menetelmässä vahvistetaan, että se voi heittää NullPointerException, IOExceptionja InvalidClassExceptionsen throwslauseke.

Huomaa, että emme ole käsitelleet NullPointerException. Tämä johtuu siitä, että se on tarkistamaton poikkeus. Sitä ei tarvitse määrittää throwslausekkeessa ja käsitellä sitä.

heittää avainsanan vs. yritä … kiinni … vihdoin

Poikkeuksia voi olla useita. try… catchKunkin menetelmän kirjoittaminen on työlästä ja koodista tulee pitkä ja vähemmän luettavissa.

throws on hyödyllinen myös silloin, kun olet tarkistanut poikkeuksen (käsiteltävä poikkeus), jota et halua saada kiinni nykyisellä menetelmällä.

Java-heitto-avainsana

throwAvainsanaa käytetään nimenomaan heittää yksi poikkeus.

Kun heitetään poikkeus, ohjelman suorituksen kulku siirtyy trylohkosta catchlohkoon. Käytämme throwavainsanaa menetelmän sisällä.

Sen syntaksi on:

 throw throwableObject;

Heitettävä esine on luokan Throwabletai luokan alaluokka Throwable.

Esimerkki 2: Java-heitto-avainsana

 class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) ) 

Tuotos

 Poikkeus säikeessä "main" java.lang.ArithmeticException: Yritetään jakaa 0: lla kohdassa Main.divideByZero (Main.java:3) kohdassa Main.main (Main.java:7) poistumistila 1 

Tässä esimerkissä heitämme nimenomaisesti ArithmeticException.

Huomaa: ArithmeticException on tarkistamaton poikkeus. Tarkastamattomia poikkeuksia ei yleensä tarvitse käsitellä.

Esimerkki 3: Heitetty tarkistettu poikkeus

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Tuotos

 Tiedostoa ei löytynyt 

findFile()Menetelmä heittää IOExceptionviestin ohitimme sen rakentajan.

Huomaa, että koska se on tarkistettu poikkeus, meidän on määritettävä se throwslausekkeessa.

Menetelmien, jotka kutsuvat tätä findFile()menetelmää, on joko käsiteltävä tätä poikkeusta tai määriteltävä se throwsitse käyttämällä avainsanaa.

Olemme käsitelleet tätä poikkeusta main()menetelmässä. Ohjelman suorituksen kulku siirtyy trylohkosta catchlohkoon, kun poikkeus heitetään. Joten loput koodista trylohkossa ohitetaan ja lauseen lauseet catchsuoritetaan.

Mielenkiintoisia artikkeleita...