Hier mal ein Negativ-Code :-)
Hier mal ein Negativ-Code :-)
Mich persönlich würde ja die exakte Arbeitsweise von Exceptions interessieren. Wie genau funktioniert das interne Abfangen? Muss man sich vorstellen das der Code im Try Block geparst wird oder ähnliches? Sprich das bei einem Indexzugriff eines Arrays bspw. vorher durch die Exception geprüft wird ob der Zugriff ungültig wäre?
Gibt es da vielleicht eine Arbeit zu ? Oder weiß es sogar "zufällig" wer?
--
Java hat generell eine Bereichs- und Typenüberprüfung.
Also bei jedem Zugriff auf irgendwas wird überprüft, ob dieser Zugriff Gültig ist.
Da ist Java schlauer, als C.
So eine Bereichs- und Typenüberprüfung machen auch noch andere Sprachen, wie z.B. (Object) Pascal, nur mit dem Unterschied, dass man in anderen Sprachen die Überprüfung deaktivieren kann. Bei Java ist sie zwingend erforderlich.
Wenn der JVM (Java Virtual Maschine) irgendwas nicht gefällt, schmeißt die JVM eine Exception.
Hm, klingt nicht so, als hättest du das Prinzip verstanden. Lies dir am besten mal den Wikipedia-Artikel zu Exception Handling durch, die sind meist gute erste Anlaufstellen. Ansonsten findet man über Google sicher auch gute Erklärungen.
Zum Selbererklären bin ich gerade zu faul. ^^"
--A human is a system for converting dust billions of years ago into dust billions of years from now via a roundabout process which involves checking email a lot.
Nein, du missverstehst meinen Post.
Was Exceptions sind und wie man sie anwendet weiß ich durchaus.
Ich drücke mich wohl unglücklich aus, mich interessiert an sich die genaue technische Implementation. Der Wiki Artikel ist mir nicht unbekannt, den hab ich früher mal gelesen. Der reißt dieses Thema kurz an, jedoch ist er dabei nicht sehr ausführlich. Mich würden da Details interessieren.
--
Stack Frames enthalten Einträge zu Exception Handlern. Sobald eine Exception geworfen wird, wird der Call Stack solange aufgelöst (Stack Unwinding), bis ein passender Exception Handler gefunden wird. Falls auch im untersten Stack Frame kein passender Handler gefunden wird, wird das Programm abgebrochen. Mehr wüsste ich auch nicht.
Ich hatte tatsächlich schon 1x den Fall wo ich vor der Wahl stand: Entweder per Exception einen alternativen Rückgabewert liefern oder umfangreiche Strukturänderungen durchführen. Hab mich für ersteres entschieden. Ich finde die Möglichkeit per Exception nicht nur im Fehlerfall sondern auch allgemein Abzweigungen einzubauen auch ziemlich interessant, auch wenn sie dafür nicht gedacht sind. Die Angst davor, von meinen Arbeitskollegen im Schlaf attackiert zu werden hat mich bisher aber davon abgehalten sowas auch wirklich auszuprobieren.
Ich habe an der Uni mal einen Übungszettel so gelöst, daß jegliche Kommunikation innerhalb des Programms über Exceptions stattfand. Die Punkte gab's, auch wenn der Code schrecklich war.
Das erinnert mich ein bisschen an http://99-bottles-of-beer.net/language-java-866.html
--A human is a system for converting dust billions of years ago into dust billions of years from now via a roundabout process which involves checking email a lot.
dead_orc: Stimmt, wobei nicht alle exceptionfähige Sprachen einen finally-Konstrukt bieten, wie z.B. C++, allerdings ist es dort möglich mittels des RAII-Pattern Vergleichbares zu implementieren.
Nein ist es nicht. C ist sich dieses Mangels durchaus bewusst, hat ihn aber absichtlich aus Performancegruenden in Kauf genommen. C ist nun einmal darauf designed, nur das noetigste zu machen um moeglichst viel Speed rauszuholen. Und bei jedem Indexzugriff eine Bereichsueberpruefung zu machen, ist definitiv eine vVerschwendung von Prozessorzyklen.
C geht in seiner Philosophie davon aus, dass der Programmierer genau weiss, was er tut, er also keinerlei Fehler macht per Definition. Es ist eben nur eine Art komfortablerer Assembler.