Java Exception(s)

Heute möchte ich Euch mal ein bisschen in die Welt der Java Exceptions einführen!

Was ist eine Exception?
Übersetzt bedeutet dieses Wort Ausnahme. In Java werden diese Ausnahmen „geworfen“, also „thrown“. In Java gibt es sie, um bestimmte Ausnahmefälle abzudecken. Hat man z.B. ein Array, das nur zwei Felder besitzt:

meinArray[0] = "Hallo";
meinArray[1] = "Welt";

und man fragt nun mit Hilfe von

meinArray[2]

das dritte Feld ab, so wird die Java Exception ArrayIndexOutOfBoundsException geworfen!

Man möchte mit diesem Aufruf wissen, was im dritten Feld des Arrays steht. Da es ein solches Feld aber nicht gibt, muss eine Ausnahme eintreten!

Wollen wir uns dies kurz an einem Beispiel klarmachen:

package exceptions;

/**
 * @author Armin
 * @since 20.09.2012
 *
 * info@prog-blog.de
 * www.prog-blog.de 
 */
public class ExeptionTest {

	public static void main(String[] args) {

		String[] meinArray = new String[2];

		meinArray[0] = "Hallo";
		meinArray[1] = "Welt";

		System.out.println(meinArray[2]);
	}
}

Die Ausgabe ist wie erwartet eine entsprechende Exception:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
	at exceptions.ExeptionTest.main(ExeptionTest.java:12)

Bekannte Vertreter der Java Exceptions sind z.B.:

 

Was passiert wenn eine Exception aufgerufen wird?

Tritt eine Exception auf, wie in unserem obigen Beispiel, wird das Programm beendet.

Erweitern wir unser obiges Beispiel, um dies zu demonstrieren:

package exceptions;

/**
 * @author Armin
 * @since 20.09.2012
 * 
 *        info@prog-blog.de www.prog-blog.de
 */
public class ExeptionTest {

	public static void main(String[] args) {

		String[] meinArray = new String[2];

		meinArray[0] = "Hallo";
		meinArray[1] = "Welt";

		System.out.println(meinArray[2]);

		System.out.println("Das Programm wird hier nicht hinkommen!");
	}
}

Die Ausgabe wird nachwievor folgende bleiben:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
	at exceptions.ExeptionTest.main(ExeptionTest.java:18)

Nun kommt aber eine interessante Technik ins Spiel: die s.g. try-catch-Blöcke!

Was ist ein try-catch-block?
Bevor ich erkläre, was dies genau ist, zeige ich Euch erstmal wie ein solcher aussieht:

		try {
			// beliebiger Code
		} catch (Exception e) {
			// TODO: handle exception
		}

Zuerst kommt der try-Teil: Frei übersetzt bedeutet try versuchen. Man versucht also -im try-Teil-beliebigen Code auszuführen, wenn dieser aber eine Exception wird (wie oben unsere ArrayIndexOutOfBoundsException), dann wird diese vom catch-Teil (catch übersetzt bedeutet fangen) abgefangen. In diesem Teil kann man nun bestimmen, was gemacht werden soll, wenn diese Exception aufgetreten ist.
In unserem Beispiel lassen wir uns einfach ein bisschen Text ausgeben:

package exceptions;

/**
 * @author Armin
 * @since 20.09.2012
 * 
 *        info@prog-blog.de www.prog-blog.de
 */
public class ExeptionTest {

	public static void main(String[] args) {

		String[] meinArray = new String[2];

		meinArray[0] = "Hallo";
		meinArray[1] = "Welt";

		try {
			System.out.println(meinArray[2]);			
		} catch (ArrayIndexOutOfBoundsException e) {

			System.out.println("Es wurde zwar eine ArrayIndexOutOfBoundsException geworfen, aber das soll uns nicht weiter stören!");
			System.out.println("machen wir weiter!");
		}

		System.out.println("hier machen wir dann weiter!");
	}
}

Die Ausgabe ist folgende:

Es wurde zwar eine ArrayIndexOutOfBoundsException geworfen, aber das soll uns nicht weiter stören!
machen wir weiter!
hier machen wir dann weiter!

Interessant ist, dass das Programm in diesem Beispiel durch den try-catch-Block, obwohl eine Exception geworfen wurde, nicht beendet wird, sondern weiterarbeitet!!
Da es aber durchaus interessant sein kann, welcher Fehler genau passiert ist, lassen wir uns die Fehlerbeschreibung mit Hilfe der Methode printStackTrace ausgeben:

package exceptions;

/**
 * @author Armin
 * @since 20.09.2012
 * 
 *        info@prog-blog.de www.prog-blog.de
 */
public class ExeptionTest {

	public static void main(String[] args) {

		String[] meinArray = new String[2];

		meinArray[0] = "Hallo";
		meinArray[1] = "Welt";
		
		try {
			System.out.println(meinArray[2]);			
		} catch (ArrayIndexOutOfBoundsException e) {
			
			System.out.println("Es wurde zwar eine ArrayIndexOutOfBoundsException geworfen, aber das soll uns nicht weiter stören!");
			
			// hiermit gibt man die Fehlermeldung auf der Console aus!
			e.printStackTrace();
			
			System.out.println("machen wir weiter!");
		}

		System.out.println("hier machen wir dann weiter!");
	}
}

Mit der Ausgabe:

java.lang.ArrayIndexOutOfBoundsException: 2
	at exceptions.ExeptionTest.main(ExeptionTest.java:19)
Es wurde zwar eine ArrayIndexOutOfBoundsException geworfen, aber das soll uns nicht weiter stören!
erstmal die Fehlermeldung lesen:
machen wir weiter!
hier machen wir dann weiter!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.