package oop.ExceptionHandling;

public class ExceptionHandling {
	
	/*Was ist das?
	 * - Hauptidee ist, dass falls der Programmer oder der User einen Fehler gemacht hat, läuft das Programm trotzdem weiter!
	 * - An exception ist ein unerwünschtes oder unerwartetes Ereignis
	 *   ,das während der Ausführung eines Programms zur Laufzeit auftritt.
	 * 
	 * - wenn man nicht weiß, was der Fehler ist, kann man dan die Basis Klasse aufrufen (Exception)
	 * 	 aber das wird langsamer als wenn ich den Fehler direkt schreibe
	 * 
	 * - unterstützt keine Methoden und Klasse
	 * - kann nicht als Parameter innerhalb einer Methode verwendet werden
	 * - kann aber innerhalb ale arten von Methoden geschrieben werden
	 * 
	 * was sid die checked und unchecked Exceptions?
	 *  - checked: Compiler zwingt mich  ein try-catch Block zu erstellen und Sie erben von der Klasse Exception, aber nicht von RuntimeException.
	 *  			wie z.b(IOException, SQLException, FileNotFoundException)
	 *  - unchecked: Compiler zwingt mich nicht try-catch Block zu erstllen und  Sie erben nur von RuntimeException.
	 *  			 wie z.b (ullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException)
	 *  
	 * welche Arten haben wir?
	 * 1. NullPointerException: Zugriff auf null-Referenz.
	 * 2. ArrayIndexOutOfBoundsException: Ungültiger Array-Indexzugriff.
	 * 3. ClassCastException: Ungültige Typumwandlung
	 * 4. ArithmeticException: Fehler in arithmetischer Operation (z.B. Division durch null).
	 * 5. NumberFormatException: Fehlerhafte Zahlumwandlung.
	 * 6. IOException: Eingabe-/Ausgabefehler.
	 * 7. FileNotFoundException: Datei nicht gefunden.
	 * 8. SQLException: Fehler in der Datenbankoperation.
	 * 9. IllegalArgumentException: Ungültiges Argument übergeben.
	 * etc...
	 */
	
	
	/*
	 * Try-catch block: 
	 * 
	 * try{
	 * 	- m try-Block wird der Code geschrieben, 
	 * 	  der möglicherweise einen Fehler verursachen könnte.
	 * 
	 * }catch(Exception e){
	 * - Was passieren soll, wenn ein Fehler auftritt?
	 * - Exception:ist die Basisklasse für alle Ausnahmen, die das Programm möglicherweise behandeln sollte. 
	 * 				wie z.b(IOException),SQLException,NullPointerException sind unterklasse von Exception
	 * - e: ist ist ein belibeger Name eines Objektes 
	 * 
	 * - man kann try in ein try erzeugen
	 * }
	 */
	public static void main(String[] args) {
		
		//Try-catch block beispiel
		try {
			int[] arr = new int[] {1,2,3};
			System.out.println(arr[4]);
		}catch(Exception e) {
			//entweder
			System.out.println("das ist ungültig");
			//oder
			System.out.println(e);
			//oder
			System.out.println(e + "das ist ungültig");
		}
		// trotz des Fehlers läuft das Programm weiter, da ich try catch habe
		System.out.println("1");
		
		
		//Try-catch block mit NullPointerException (ist eine klasse) beispiel
		//also Objekt ist leer!
		try {
			int[] arr = null;
			//System.out.println(arr[4]); fehler
		}catch(Exception e) {
			
			System.out.println(e.toString());
		}
		// trotz des Fehlers läuft das Programm weiter, da ich try catch habe
		System.out.println("1");
		
		
		//Try-catch block mit NumberForamtEception (ist eine klasse) beispiel
		try {
			System.out.println("haöö");// die wird ausgegeben
			int val = Integer.parseInt("String23");
			System.out.println(val);
			System.out.println("haöö");// die wird nicht ausgegeben
		}catch(Exception e) {
					
			System.out.println(e.toString());
		}
		// trotz des Fehlers läuft das Programm weiter, da ich try catch habe
		System.out.println("1");
				
	
		
	}
	

}
