Exceptionbehandlung --> catch/throws

Fiandus

Mitglied
Hallo zusammen,

mir ist gerade etwas aufgefallen, was ich einfach nicht verstehe. Bis jetzt bin ich davon ausgegangen, dass es zwei Möglichkeiten zur Ausnahmebehandlung gibt:

1.: man packt die kritische Stelle, die eine Ausnahme auslösen kann DIREKT in einen try und catch-Block --> Ausnahmebehandlung erledigt.

2.:man schreibt an den jeweiligen Funktionskopf "throws XException", wobei dies nur ein WEITERLEITEN der Exception ist, welche später irgendwann trotzdem von einem try und catch-Block gefangen werden muss.

Jetzt habe ich aber grad gesehen, dass ich eine Exception per throws weiterleiten kann OHNE sie später per try und catch aufzufangen.

Die Klasse um die es sich handelt ist folgende (Großschreib-Document):

Java:
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class FieldDocument extends PlainDocument
{
	public void insertString(int off, String s, AttributeSet a) throws BadLocationException
	{
		super.insertString(off, s.toUpperCase(), null);
	}
}

Zunächst hatte ich den super-Aufruf von insertString in try und catch gesetzt, das ergab für mich Sinn. Anschließend hab ich den try und catch-Block entfernt und das Throws an den Funktionskopf angehangen. Ich habe jetzt in der Klasse welche eine Instanz des FieldDocuments erzeugt keinen try und catch block..sprich die Exception wird nur weitergeleitet, aber nirgendwo aufgefangen..und trotzdem krieg ich keine Fehlermeldung.

Kann mir das jemand erklären bitte? Ich bin bis jetzt wie gesagt davon ausgegangen, dass "throws" nur zum weiterleiten von Exceptions da ist und dass JEDE Exception früher oder später per try-catch gefangen werden muss.

Vielen Dank!
 
T

TheRealSpikee

Gast
Hehe , nein , da hast du einfach nur einen Denkfehler. Wenn dieses THROWS nirgends gecatcht werden würde würde man das garnicht compilen können.
Viel wichtiger ist hier eigentlich die Frage : WER callt diese Methode ? Nun , das wird vom EDT aus gemacht : nämlich der KeyListener des Eingabefeldes dem dieses Document zugewiesen wurde.
Das ganze ist etwas komplizierter zu erklären als es ist wenn man es verstanden hat , aber lass dir für den Anfang so viel gesagt sein : DORT , wo insertString() gecallt wird wird diese Exception gecatcht.
 

Fiandus

Mitglied
Ah okay, ich glaube ich weiß so in etwa wie das gemeint ist. Ich werd mal ne Nacht drüber schlafen, ist eh schon spät. Vielen Dank jedenfalls schonmal :)
 
B

bygones

Gast
Hehe , nein , da hast du einfach nur einen Denkfehler. Wenn dieses THROWS nirgends gecatcht werden würde würde man das garnicht compilen können.
mhm
Java:
public class Foo {
  public static void main(String[] args...) throws IOException {
    throw new IOException("b lub");
  }
}
compilierbar
 
T

TheRealSpikee

Gast
mhm
Java:
public class Foo {
  public static void main(String[] args...) throws IOException {
    throw new IOException("b lub");
  }
}
compilierbar

HAHA ... darf ich lachen du Pommes ?

Wenn du main() ein throws mitgibts ... was meinst wo das landet ?

BEIM CALLER VON MAIN ... und damit irgendwo in den tiefen der VM ... es wird also auch da irgendwo gefangen ...



ey wie geil ... wenn man keine Ahnung hat einfach mal sinnlosen Mist posten und sich schlau fühlen ...

gott junge ... die mal die DOC lesen ... das ist ja beschränkt ...
 
B

...ButAlive

Gast
Das was TheRealSpike schreibt ist so auch nicht ganz richtig.

Zunächstmal unterscheidet man in Java zwischen Checked- und Unchecked-Exception (es gibt noch Errors aber die lass ich jetzt mal der einfachheithalber weg).
Der Unschied zwischen beiden ist, das Checked-Exceptions in einem catch-Block gefangen werden oder mit throws weitergeleitet werden müssen, Unchecked-Exceptions können gefangen oder weitergeleitet werden. Unchecked-Exceptions sind alle Exceptions, die von java.lang.RuntimeException abgeleitet sind, Checked Exceptions alle anderen.
Wenn eine Unckecked-Exception nirgendwo gefangen wird oder eine Checked-Exception in der main-Methode geworfen wird, dann flieg sie bis zu einer Implementierung von Thread.UncaughtExceptionHandler (Thread.UncaughtExceptionHandler (Java Platform SE 6)). Davon hat jeder Thread einen und jeder Programmcode wird in einem Thread ausgeführt. In der Standard-Implementierung wird die Exception dann auf der Konsole ausgegeben, aber man könnte auch eine Implementierung schreiben, die z.B. dem User einen Dialog anzeigt.

@Fiandus Ich hoffe ich konnte dir mit meiner Erklärung etwas helfen.

@TheRealSpikee dein Vorschlag mit dem "Wenn man keine Ahnung hat, sollte man keinen Mist posten" und "mal die Doku lesen" (Exceptions) find ich gut...
 
T

TheRealSpikee

Gast
jo ... super erklärung ... nur nicht auf meinen post eingegangen ...


ganz erlich : was meinst du denn WO der UEH für den main-thread steckt ? der spruch : "wird an eine implementierung von UEH weitergeworfen" is genial ... und du meinst wirklich das es einen unterschied macht ob checked oder unchecked wenn man main z.b. alles thrown lässt und es dann irgendwo in der VM aufgefangen wird ? ... kurz um : dein post war viel erklärung um nur eins auszudrücken : im endeffekt wird eh alles von der VM verarbeitet und spätestens DA werden auch alle THROWABLE *um auch mal die ERROR mit einzuschließen* gecatched ...


was TO wissen wollte : warum er bei PlainDocument.insertString(...) throws Exception keine try-catch braucht ... die antwort : weil es im EDT gefangen wird ...

ob wir uns jetzt hier nun über checked und unchecked exceptions unterhalten oder nicht ... da TO noch nich mal sowas simples weis wird er den rest auch nicht verstehen ...




ey ihr seit hier so banane in dem board ...
 
B

...ButAlive

Gast
Mein Gott komm mal wieder runter, aber gut nur weil du weil du hier abgehst, heißt das noch lange nicht das du Recht hast.

Du hast nur damit Recht, dass ich nicht auf die Frage des TOs eingegangen bin, sondern auf deine Aussage, dass eine Execption immer irgendwo gefangen wird. Was ich ausdrücken wollte ist, dass du nicht unbedingt ein catch(Throwable) finden wirst, sondern, wenn eine Exception durchfliegt, ein anderer Mechanismus greift. Außerdem ist der Titel des Threads Exceptionbehandlung, da wird man doch noch auf Exceptionbehandlung tiefer eingehen dürfen.

Aber zurück zur Frage vom TO:

In deinem Beispiel wird die BadLocationException von PlainDocument einfach nur weiter geworfen, das entspricht doch genau dem was du davor beschrieben hast. Sobald du FieldDocument#insertString aufrufst musst du was mit der BadLocationException machen. Da hilft dir auch der EDT nicht, solange du eine Checked-Exception hast. Beim EDT kommen nur Unchecked-Execptions und Errors an und in aller Regel werden diese auch einfach nur weiter geworfen so dass sie dann beim UncaughtExceptionHandler an.
 

Fiandus

Mitglied
Danke euch für eure Antworten. Jetzt ist es mir klar =). Die insertString-Methode wird in meinem Quellcode ja gar nicht aufgerufen. Sie wird im EDT aufgerufen, was mit dem KeyListener des Documents zu tun hat (so in etwa).

Probehalber habe ich einfach mal in einer anderen Klasse explizit die insertString-Methode aufgerufen und dort musste ich die Exception dann auch catchen. Und sie muss gecatcht werden weils eine checked-Exception ist. Das mit den checked- und unchecked-Exceptions ist übrigens nicht neu für mich, es war mir nur entfallen :oops: Das mit dem UncaughtExceptionHandler hingegen wusste ich noch nicht.

Jedenfalls vielen Dank für eure Hilfe TheRealSpikee und ...ButAlive.

Thema wäre dann damit erledigt :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Exceptionbehandlung erzwingen? Wie? Java Basics - Anfänger-Themen 2
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
missy72 Catch Blöcke zusammenfassen Java Basics - Anfänger-Themen 6
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
districon Try - Catch Java Basics - Anfänger-Themen 8
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
B Try-Catch Block Java Basics - Anfänger-Themen 3
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
B try catch finally Java Basics - Anfänger-Themen 2
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
H throws und try catch Java Basics - Anfänger-Themen 8
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
I Try-Catch innerhalb eines Catchblocks Java Basics - Anfänger-Themen 1
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
V InputMismatchException (Try and catch) Java Basics - Anfänger-Themen 10
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
TheMenox Try and Catch Java Basics - Anfänger-Themen 12
J Try Catch Java Basics - Anfänger-Themen 6
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
F try/catch Ausführungen ? Java Basics - Anfänger-Themen 3
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
I Exception try-catch Java Basics - Anfänger-Themen 1
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
F try/catch - (else) Java Basics - Anfänger-Themen 11
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
J Methoden try / catch exception Java Basics - Anfänger-Themen 5
S 'continue' in catch- und if-blöcken Java Basics - Anfänger-Themen 2
B Erste Schritte try-catch-Klauseln, überprüfte Ausnahmen Java Basics - Anfänger-Themen 4
D Erste Schritte Warum try-catch für FileWriter Java Basics - Anfänger-Themen 5
S try-catch-finally-Problem Java Basics - Anfänger-Themen 10
xehpuk Compiler-Fehler final Variable in try-catch Wert zuweisen Java Basics - Anfänger-Themen 8
M Try und Catch Java Basics - Anfänger-Themen 5
B Fehler mit try + catch verhindern Java Basics - Anfänger-Themen 8
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
C Wiederholung von try-catch Java Basics - Anfänger-Themen 3
N try and catch block in finally Java Basics - Anfänger-Themen 8
M exception catch falsch? Java Basics - Anfänger-Themen 11
S catch Exception erklären Java Basics - Anfänger-Themen 2
C Variable in try/catch Java Basics - Anfänger-Themen 10
B Try and Catch Java Basics - Anfänger-Themen 6
StrikeTom Ein paar(2) Fragen zu throws und try + catch Java Basics - Anfänger-Themen 6
J try und catch Java Basics - Anfänger-Themen 7
G Exceptionfreie Anweisungen in try-catch-Blöcke, Java Basics - Anfänger-Themen 6
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
M Frage zu try ... catch Java Basics - Anfänger-Themen 9
S NumberFormatException , mit Try/Catch? Java Basics - Anfänger-Themen 7
B Try/catch Java Basics - Anfänger-Themen 11
M Try & Catch Java Basics - Anfänger-Themen 7
V Was ist ein Try-Catch Block Java Basics - Anfänger-Themen 4
M Nach catch mit der schleife weitermachen Java Basics - Anfänger-Themen 9
M try-catch, call-by-reference, Streaming und Strings Java Basics - Anfänger-Themen 10
S sauberer Stil von return Wert (try, catch, finally) Java Basics - Anfänger-Themen 9
S try-catch Java Basics - Anfänger-Themen 10
Tandibur Server führt "try-catch" nicht aus Java Basics - Anfänger-Themen 6
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
I Frage zu Try - Catch - Finally Java Basics - Anfänger-Themen 10
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
H try catch Java Basics - Anfänger-Themen 4
I double-Variable außerhalb des Try-Catch-Blocks nicht gültig Java Basics - Anfänger-Themen 2
D Catch wiederholt sich ständig Java Basics - Anfänger-Themen 2
T try-catch-finally Java Basics - Anfänger-Themen 8
G Anwendung von try-catch Java Basics - Anfänger-Themen 10
G try. catch Verwendung Java Basics - Anfänger-Themen 11
M Try-Catch-Problem Java Basics - Anfänger-Themen 4
G habe ein Catch problem Java Basics - Anfänger-Themen 7
C Nach Catch-Klausel Programm weiter laufen lassen Java Basics - Anfänger-Themen 5
B try & catch Problem mit Exception bzw String.split() Java Basics - Anfänger-Themen 5
C Frage zu try - catch (saubere Lösung?) Java Basics - Anfänger-Themen 3
G Bei catch beenden Java Basics - Anfänger-Themen 7
U catch mit finally Java Basics - Anfänger-Themen 5
C Exceptions, try, catch --> Frage Java Basics - Anfänger-Themen 7
J Try-Catch-Frage Java Basics - Anfänger-Themen 13
B catch exception funktioniert nicht! Java Basics - Anfänger-Themen 14
D Frage try and catch Java Basics - Anfänger-Themen 7
ven000m try catch - was muss bei catch rein Java Basics - Anfänger-Themen 28
G Datenbank - catch Java Basics - Anfänger-Themen 2
H Konstruktor in Methode fremder Klasse: try-catch-Problem Java Basics - Anfänger-Themen 4
M return und try-catch Java Basics - Anfänger-Themen 6
M Try . catch erzwungen? Java Basics - Anfänger-Themen 11
F eigene Exception aus try-catch werfen Java Basics - Anfänger-Themen 10
A Syntaxproblem mit try und catch Java Basics - Anfänger-Themen 3
Silver-Blue fragen zu Swing und catch Exceptions Java Basics - Anfänger-Themen 2
G return fehler bei try catch Java Basics - Anfänger-Themen 8
H try und catch Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben