Java: poikkeukset – try-catch-finally

Javassa poikkeuksilla tarkoitetaan jotain odottamatonta virheellistä tapahtumaa ohjelman suorituksessa. Hyvä esimerkki poikkeuksesta on, kun yritetään lukea tiedostoa jota ei ole. Tällöin java heittää poikkeuksen FileNotFoudException. Poikkeukset voidaan jakaa kahteen ryhmään.

1. Tarkistetut poikkeukset. Tilanteet jotka java tarkistaa, esimerkiksi edellä mainittu tiedoston puuttuminen.
2. Tarkistamattomat poikkeukset. Tilanteet jotka voivat syntyä kun vaikka taulukon indeksiraja ylitetään. Tarkistamattomat poikkeukset ovat tilanteita, joissa asian tulisi hoitaa ohjelmoijan itse.

Poikkeusluokat taas voidaan jakaa kolmeen ryhmäänsä.

1. Exception on kaikkien poikkeusten yliluokka.
2. Error on tilanne josta ohjelman ei enää odoteta toipuvan. Tässä on vielä mahdollista saada jotain tietoja pelastettua.
3. RuntimeException johtuu yleensä ohjelmointivirheestä. Oikealla poikkeusten käsittelyllä ohjelman ajo voidaan pelastaa ja ajaa tarvittaessa alas hallitusti.

Poikkeusten käsittely: try-catch- finally
finally ei ole pakollinen osa käsittelyä ja catch lauseita voi olla useita, jokaiselle mahdolliselle poikkeukselle. Tilanteen voi esittää kansankielellä seuraavalla tavalla.

  • (try) yritä tehdä jotain
  • (catch) sieppaa mahdollinen poikkeus ja käsittele se.
  • (finally) tee tämä joka tapauksessa
  • Huomionarvoista on, että jos finally on määritelty se tehdään aina, vaikka try tai catch kohdissa olisi return jolla poistutaan metodista.

    Ja koodilla seuraavasti:

    public void metodi(){
    	try{
    		// tehdään jotain joka voi aiheuttaa poikkeuksen
    	}
    	catch (Poikkeus1 e){
    		// tehdään jotain korjataksemme tilanteen
    		// tai jatkamme matkaa
    	}
    	catch (Poikkeus2 e){
    		// tehdään jotain korjataksemme tilanteen
    		// tai jatkamme matkaa
    	}
    	finally{ // tämä ei ole pakollinen
    		// mutta voisimme pahassa tilanteessa
    		// käyttää tätä ohjelman hallittuu alasajoon
    	}
    }
    

    Alla esimerkkikoodi poikkeuksen käsittelystä try-catch lausekkeiden avulla.

    public class StringSummaksi {
    	public static void main(String[] args) {
     
    		// "vahingossa" sijoitimme soluun 2, kolmosen shift-nappula pohjassa.
    		String [] s={"1", "2", "#"};
    		int summa = 0;
    		for (int i=0;i<s.length;i++){
    			try {
    				summa = summa + Integer.parseInt(s[i]);
    			} catch (NumberFormatException e) {
    				System.out.println("Virhe: " + s[i] + " ei ole numero.");
    			}
    		}
    		System.out.println("Summa = " + summa);
    	}
    }
    

    Lisää poikkeuksista tulevissa artikkeleissa.

    Advertisements

    Vastaa

    Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

    WordPress.com-logo

    Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

    Twitter-kuva

    Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

    Facebook-kuva

    Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

    Google+ photo

    Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

    Muodostetaan yhteyttä palveluun %s