Eigene Exceptions

Status
Nicht offen für weitere Antworten.

obi

Mitglied
Abend, ich hab bis jetzt hier im Forum nur die Post gelesen und hab jetzt auch "endlich" ne eigene Frage zur Java Programmieren ( Bin vor ner Weile von c# auf Java umgestiegen ).

Ich habe schon enige Sachen mit den allgemeinen Exceptions rumprobiert z.B.

Java:
public class Exceptionabfrage
{
	public static void main(String[] args)
	{
		// Nimmt eine Eingabe an und prüft ob es eine Zahl ist oder nicht, falls nicht wiederholt er die Eingabe
		
		int number = 0;
		
		//Endloss schleife welche erst durch Break unterbrochen wird falls es kein catch fall gab
		while(true)
		{
			
			try
			{
			
			// Erstellt ein GUI Eingabe fenster !	
			String s = javax.swing.JOptionPane.showInputDialog("Bitte Zahl eingeben" );
			number = Integer.parseInt(s);
			break;
			}
			
			//Exception das es keine Zahl war
			catch (NumberFormatException Oo)
			{
				System.err.println("Das war keine Zahl");
			}
			
						
		}
		
		System.out.println("Danke für die Zahl " + number);
		// Beendet das Programm
		System.exit(0);
		
		
	}
}

Doch jetzt wollt ich wissen wie eigene Exception genutzt werden können und vorallem für was ! Danach stellt mir die Frage wie ich meine eigene erstellte Exception sagen kann wann sie zutrifft.

Das man dafür eine neue Klasse erstellten muss die z.b von RunTimeException abgeleitet ist, ist mir klar, aber ich habe nirgents gefunden wie man dann der eigenen Exception sagen soll das sie dann und dann zutrifft. So ähnlich wie eine If Abfrage stelle ich mir das vor.

Damit wir ein kleines Beispiel haben sagen wir mal das wir einen Namen eingeben und meine Exception ausschlagen soll falls ein Sonderzeichen eingegeben worden ist ( oder was auch immer ). In meiner Vorstellung würde das ganze ca so aussehen:

Java:
public class EigeneException extends RunTimeException
{

EigeneException()
{
}

SonderzeichenException(String Eingabe)
{
// HIER REINSCHREIBEN WANN SIE ZUTREFFEN SOLL
}


}

und das Main stelle ich mir in diesem Fall so vor:

Java:
public class Test
{
       public static void main(String[] args)
      {

      String Name;
      
      try
     {
     Name = javax.swing.JOptionPane.showInputDialog("Bitte Namen eingeben ohne  Sonderzeichen !" )

     }
    
    catch (SonderzeichenException s)
    {
     System.err.println("Sie haben ein Sonderzeichen eingegeben");
    }





     }
}

Leider habe ich keine Ahnung ob es sich so umsetzen lässt oder ob überhaupt den eigentlich Sinn von den Exception trifft, klar würde es auch mit einer einfachen Methode bzw. Ifabfrage gehn ob da Sonderzeichen drinn sind aber mir fällt grad kein besseres Beispiel ein vielleicht habt ihr bessere beispiele für eigene Exceptions ?

Ich hoffe ihr versteht mein Problem ;)

mfg
 
S

SlaterB

Gast
dein Beispiel ist so gut wie jedes andere,
das besondere an Exceptions ist, dass man den aktuellen Arbeitsablauf verlassen und teilweise viele Methodenaufrufe zurückspringen kann,
je komplexer das Programm desto aufwendiger wäre es, das alles mit if nachzubilden,

kann man schlecht in Testprogrammen darstellen

werfen kannst du deine eigene Exception mit
if (sonderzeichen gefunden) {
throw new SonderzeichenException(evtl. Parameter passend zu einem Konstruktor);
}
 

Painii

Bekanntes Mitglied
und das Main stelle ich mir in diesem Fall so vor:

Java:
public class Test
{
       public static void main(String[] args)
      {

      String Name;
      
      try
     {
     Name = javax.swing.JOptionPane.showInputDialog("Bitte Namen eingeben ohne  Sonderzeichen !" )

     }
    
    catch (SonderzeichenException s)
    {
     System.err.println("Sie haben ein Sonderzeichen eingegeben");
    }





     }
}

Leider habe ich keine Ahnung ob es sich so umsetzen lässt oder ob überhaupt den eigentlich Sinn von den Exception trifft, klar würde es auch mit einer einfachen Methode bzw. Ifabfrage gehn ob da Sonderzeichen drinn sind aber mir fällt grad kein besseres Beispiel ein vielleicht habt ihr bessere beispiele für eigene Exceptions ?

Ich hoffe ihr versteht mein Problem ;)

mfg

Das funktioniert so nicht.
In dem try wird keine Funktion deine SonderzeichenException werfen.
Du müsstest eine eigene Methode bauen, die die Eingabe auf Sonderzeichen prüft und dann evtl. eine Exception wirft, mit der die main umgehen kann:

Java:
public String eingabe(){
 String eingabe = javax.swing.JOptionPane.showInputDialog("Bitte Namen eingeben ohne  Sonderzeichen !" );
if(eingabe.contains(sonderzeichen){
 throw new SonderzeichenException();
}
return eingabe

Jetzt kann deine main bei eingabe() die SonderzeichenException fangen.

Und ja, wie SlaterB schon angedeutet hat, Exceptions sind eine Möglichkeit dem Anwender einer Methode keine Rückgabe zu machen sondern eben eine Ausnahme zu symbolisieren. Was genau die Ausnahme war sagt das Exception-Objekt dann dem Aufrufer.
 

obi

Mitglied
dein Beispiel ist so gut wie jedes andere,
das besondere an Exceptions ist, dass man den aktuellen Arbeitsablauf verlassen und teilweise viele Methodenaufrufe zurückspringen kann,
je komplexer das Programm desto aufwendiger wäre es, das alles mit if nachzubilden,

kann man schlecht in Testprogrammen darstellen

werfen kannst du deine eigene Exception mit
if (sonderzeichen gefunden) {
throw new SonderzeichenException(evtl. Parameter passend zu einem Konstruktor);
}

Denn Sinn habe ich verstanden, wer will schon alle paar Zeilen ein If sehen ;)

Aber genau da seh ich das Problem, vielleicht denke ich grad mit der Falschen logik nach.

Ich stelle mir das ganze so vor das beim Laufen des Programms bei jeder Zeile geschaut wird ob dort ein Fehler aufgetreten ist, falls ja wird der Fehler "geworfen" und mit catch eingefangen und die catches schaun von oben nach unten nach ob ihre Exception zu diesem Fehler passt. Falls er passt führt er das aus was ich in den Catch schreibe, z.b die error Meldung.

Also heißt dass das bei den Java Exceptions doch iwo deklariert sein muss wann sie zutreffen ! Und wenn ich jetzt logisch weiter denke müsste dies doch auch für meine eigene Exception gelten oder nicht ? Daher sollte dies doch bei der klassen Deklaration passieren. So das ich nicht wie du geschrieben hast eine extra if anweisung schreiben muss wann meine Exception genutzt werden soll.

Denn dann brauch ich doch die Exception gar nicht mehr, denn wenn durch das if sehe das es ein Sonderzeichen ist kann ich doch gleich in dem if den fehler beheben und brauch dafür die exception nicht.

Bitte klär mich auf falls ich mir das falsch Denke, ich seh auch grad iwie nicht wohin ich diese if anweisung von dir in dem Beispiel einbauen sollte, im try, in der klasse ?


ok ich seh grad das mir noch jmd geantwortet hat muss mir kurz den anderen post noch durchlesen


edit:

Hm, aber ich seh immer noch das gleiche Problem: Wenn du in der Methode eine If Anweisung machst wozu brauch ich dann noch meine Exception ? Dann kann ich genau so gut eine Methode erstellen welche jede Eingabe prüft ob sie Sonderzeichen enthält ( durch contains ) und falls ja soll er ne err meldung machen.

Falls ich für jedesmal eine if Anweisung brauche das er meine Exception wirft damit sie per catch gefangen werden kann, kann ich doch gleich diese if anweisung nutzen um den Fehler zu beheben.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> kann ich doch gleich diese if anweisung nutzen um den Fehler zu beheben.

exakt, deshalb besteht ein Programm zu 97% auf normalen if und nur zu 3% aus Exceptions,
eben weil man das meiste sofort klären kann,
Exceptions sind dann gut, wenn man es nicht sofort klären kann, beispielsweise wenn du eine allgemeine Bibliothek schreibst,
die in 10 verschiedenen Programmen benutzt wird, da kann die parse-Methode nicht wissen, was im Fehlerfall passieren soll,
das muss der Aufrufer machen

das try/ catch zur Exception gehört daher niemals in die gleiche Methode,
sondern ist irgendwo weit entfernt beim Aufrufer der Method oder so
 

Painii

Bekanntes Mitglied
Hm, aber ich seh immer noch das gleiche Problem: Wenn du in der Methode eine If Anweisung machst wozu brauch ich dann noch meine Exception ? Dann kann ich genau so gut eine Methode erstellen welche jede Eingabe prüft ob sie Sonderzeichen enthält ( durch contains ) und falls ja soll er ne err meldung machen.

Falls ich für jedesmal eine if Anweisung brauche das er meine Exception wirft damit sie per catch gefangen werden kann, kann ich doch gleich diese if anweisung nutzen um den Fehler zu beheben.

Der Sinn ist, dass du in der eingabe selbst NICHT auf den Fehler eingehen musst.
Wenn du ein System.out.println("Keine Sonderzeichen"); einbaust, dann wird immer auf der Konsole geschrieben.
Vielleicht will aber ein Anwender das ganze lieber in einem eigenen Fenster haben statt in der Konsole. Oder solange der Nutzer Sonderzeichen eingibt wieder neu abfragen.
Wenn du da eine Ausgabe einbaust kann der Aufrufer nichtmehr angemessen reagieren.

Normal sollte die Logik nichts ausgeben.
In dem Fall ist die Funktion eingabe() die Logik. Hier also nichts ausgeben.
Jetzt kannst du ja denken "hey, ich geb eh nen String zurück, also schreib ich hin: return "Fehler";". Damit weiss der Aufrufer aber nicht dass ein Sonderzeichen aufgetreten ist (sondern denkt sich eben "hmm, der Nutzer hat "Fehler" eingegeben)".
Andere Möglichkeit ist eben die Exception, womit der Aufrufer dann sagen kann: "Hey, ich hab keinen String bekommen sondern eine Exception, da muss ich reagieren".
In deinem Beispiel wäre es mit dem if auch so getan, aber bei größeren Projekten wirst du irgendwann nichtmehr wissen wie du angemessen reagierst.
 

obi

Mitglied
Ok dann hatte ich am Ende doch eine Flasche vorstellung von der nützlichkeit von Exceptions, hatte gehofft die ganzen If´s mit einer Exception ersetzen zu können, also spielen eigene erstellste Excetions für den Anfang ( an dem ich noch bin ) eher eine kleine Rolle ?

@Vorposter, auch dir Danke ich. Ich denke ich muss wohl erstmal zu so einem Fall kommen den du angesprochen hast wo ich eigene Exceptoins wirklich brauche.

Aus meiner Sicht jetzt nimmt es sich halt nichts zwischen einer eigenen Methode, ner If Anweisung oder Exception ( die in einer Methode dann ist ), nur das manche übersichtlicher sind als die anderen.
 
Zuletzt bearbeitet:

obi

Mitglied
So ich habs mal Probiert zwar nicht ganz so wie ich es mir am Anfang gewünscht habe aber es funktioniert.

Java:
import java.io.*;
import java.sql.Date;
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.*;

//Klasse für die eigene Exception welche von RuntimeException erbt
class ownexception extends RuntimeException
{
	public ownexception()
	{
		
	}
	
	public ownexception(String s)
	{
		super(s);
	}
	
	//Methode welche schaut ob es ein ! drinne ist, falls ja wirfst sie meine Exception die dann erst vom Catch gefangen werden kann
	public void Zeichenprüfung(String eingabe)
	{
		if(eingabe.contains("!"))
			throw new ownexception();
	}
		
}


public class fürleon 
{
	public static void main(String[] args)
	{
				
		int number = 0;
		ownexception d = new ownexception();		
		
		while(true)
		{
			
			try
			{
			String s = javax.swing.JOptionPane.showInputDialog("Bitte Zahl eingeben" );
		
			//Andere möglichkeit falls man keine Methode nutzen will
			if(s.contains("?"))
				throw new ownexception();
			
			d.Zeichenprüfung(s); // Die Methode
			number = Integer.parseInt(s);
						
			break;
			}
						
			catch(NullPointerException a)
			{
				System.exit(0);
			}
			catch(NumberFormatException ee)
			{
				System.out.println("Das war keine Zahl");
			}
			//Fängt hier meine Exception falls sie geworfen wurde
			catch (ownexception o)
			{
				System.err.println("Da war ein ! oder ? drinne");
			}
			
		}
		
		System.out.println("Danke für die Zahl " + number);
		System.exit(0);
				
	}

	

		
	
}

Ich habe nur eine Frage noch die ich einfach nicht verstehe ! Wenn ich meine Methode d.Zeichenprüfung(s); NACH DEM number = Integer.parseInt(s); einsetze funktioniert die Exception nicht: catch(NullPointerException a) welche ja Ausgelöst werden soll falls bei der Eingabe jmd auf "Abbrechen" klickt. Könnt mir einer sagen warum ?
 
S

SlaterB

Gast
weil Integer.parseInt vorher eine NumberFormatException wirft?

'funktioniert nicht' existiert in keinem Wortschatz,
du kannst doch genau feststellen, was stattdessen passiert
 

obi

Mitglied
Kopf -> Tisch.

Naja ich habs jetzt kapiert wie man die eigene Exceptions einbinden kann, daher kanns Geschlossen werden.
 

Landei

Top Contributor
Da gibt es so einen hübschen Knopf, mit dem du das Thema als "erledigt" kennzeichnen kannst ...
 

obi

Mitglied
Hab den Knopf gesucht und erst jetzt gefunden ;)
Nicht gedacht dass das Klicken "Frage offen" den Status auf Erledigt ändert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
M Eigene Fehlermeldung bei Exceptions? Java Basics - Anfänger-Themen 12
D Eigene Exceptions Java Basics - Anfänger-Themen 8
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C eigene Exception Java Basics - Anfänger-Themen 4
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3
W GUI als eigene Klasse oder in die Startklasse? Java Basics - Anfänger-Themen 21
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
M Datentypen Eigene iterierbare Liste Java Basics - Anfänger-Themen 4
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
S Klassendiagramm - nur eigene Klassen? Java Basics - Anfänger-Themen 3
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
C Eigene Interpreter-Programmiersprache mit Java Java Basics - Anfänger-Themen 17
B eigene Exception.... Java Basics - Anfänger-Themen 5
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
M Eigene Pakete in Eclipse erstellen Java Basics - Anfänger-Themen 5
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
H eigene Schriftarten registrieren Java Basics - Anfänger-Themen 5
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
M Eigene LinkedList und Nodes Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Neue Themen


Oben