Käyttäjän työkalut

Sivuston työkalut


java:poikkeukset

Poikkeukset

Poikkeukset ovat ohjelman virhetilanteita, jotka saattavat aiheuttaa koko ohjelman kaatumisen.

Poikkeuksen heittäminen ulos ohjelmasta

Jos käyttäjältä kysytään jotain, niin public-litanian perään piti laittaa ”throws IOException”. Tämä kertoo tulkille, että ohjelmassa saattaa syntyä poikkeus IOException, jota ei käsitellä ohjelmassa sen enempää.

Tulkki ei suostu kääntämään ohjelmaa, mikäli tätä poikkeusta ei huomioida ohjelmaa kirjoitettaessa. Helpoiten se on huomioitu jättämällä se käsittelemättä.

Poikkeuksen käsittely

Poikkeus voidaan käsitellä kolmella eri komennolla: try, ====== catch ====== ja finally. try-komennolla aloitetaan lohko, jossa on komento, joka voi aiheuttaa poikkeuksen. Mikäli poikkeus tulee, niin suoritetaan try-lohko. Finally-lohko suoritetaan joka tapauksessa.

Esimerkiksi Integer.parseInt(String) voi aiheuttaa poikkeuksen, mikäli merkkijonossa ei olekaan mitään desimaaliluvuksi tulkittavaa.

class Poikkeus
{
   public static void main(String args[])
   {
      int syote;
 
      syote = Integer.parseInt(args[0]);
 
      System.out.println(syote);
   }
}

Ohjelma toimii hyvin, kun argumenttina on kokonaisluku. Mutta kun syöte on desimaaliluku 7.6, niin ohjelmassa tulee poikkeus NumberFormatException.

poikkeus.jpg

Tämä voidaan käsitellä seuraavasti:

class Poikkeus2
{
   public static void main(String args[])
   {
      int syote;
 
      try
      {
	 syote = Integer.parseInt(args[0]);
	 System.out.println(syote);
      }
      catch (NumberFormatException e)
      {
	 System.out.println("Et antanut argumenttina kokonaislukua!");
      }
      finally
      {} //eli ei tehdä mitään
   }
}

Ohjelma varoittaa nyt desimaaliluvun syöttämisestä. Ohjelmaan jää kuitenkin vielä virhe. Jos käyttäjä ei anna argumenttina lukua, niin ohjelma kaatuu virheilmoitukseen. Korjaaminen jää harjoitustehtäväksi. try-lohkon perään voidaan laittaa useampi catch-lohko!

Tehtäviä

java/poikkeukset.txt · Viimeksi muutettu: 2015/08/13 16:36 / 127.0.0.1