Exceptions

javastudent25

Bekanntes Mitglied
Hallo

Ich habe da einen Fehler, bei dem ich nicht weiss, wie ich diesen lösen kann.

Es handelt sich um:
No exception of type ArithmeticException can be thrown; an exception type must be a subclass of Throwable

Java:
public class ArithmeticException {

    public static void main(String[] args) {
    
          new ArithmeticException();
          divide(2);

    }

    public static int divide(int a){
        int solution;
        try
        {
           solution = a/0;
        }
        catch (ArithmeticException e)
        {
            System.out.println("Division by null in not allowed");
        }
        return solution;
    }

}
 

javastudent25

Bekanntes Mitglied
Wie meinst du das? So etwa?
Das hatte ich versucht, das tut so auch leider nicht..

Java:
public class ArithmeticException extends Exception{

    public static void main(String[] args) {
   
          new ArithmeticException();
          divide(2);

    }

    public static int divide(int a){
        int solution;
        try
        {
           solution = a/0;
        }
        catch (ArithmeticException e)
        {
            System.out.println("Division by null in not allowed");
        }
        return solution;
    }

}
 

javastudent25

Bekanntes Mitglied
Also ich habe das jetzt so gemacht und das funktioniert.
Aber ArithmeticException ist doch keine user defined exception.
Ich habe ja jetzt meine eigene Klasse einer Exception generiert.
Das muss doch ohne dem Extend ja auch irgendwie gehen, oder?

Übrigens kommt bei mir bei Division durch 0 infinity raus, also keine Standardfehlermeldung vom Compiler..

Java:
public class ArithmeticException extends Exception {

    public static void main(String[] args) {

        divide(0);

    }

    public static double divide(int a) {
        double solution = 0;
        try {

            if (a <= 0) {
                throw new ArithmeticException();
            }
            solution = 1.0 / a;
            System.out.println(solution);

        } catch (ArithmeticException e) {
            System.out.println("Division by null in not allowed");
        }
        return solution;
    }

}

 

thecain

Top Contributor
Ja, dein Code ist auch vollkommen falsch. Eine Exceptin steht alleine da und hat bestimmt keine main.

der Aufbau wäre quasi:

Code:
class Calculator {
double divide(int a) throws ArithmeticException;
}

class ArithmeticException extends Exception {

}

und nein, ohne extends Exception oder extends Throwable geht das nicht. Dazu müsstest du dich mal in das Thema Exceptions einlesen.
 

javastudent25

Bekanntes Mitglied
ok, deine Variante versuche ich morgen.

Diese Variante funktioniert


Java:
public class Arithmetic__exception1 {

    public static void main(String[] args) {
   
         
          divide(2);

    }

    public static int divide(int a){
        int solution=0;
        try
        {
           solution = a/0;
        }
        catch (ArithmeticException e)
        {
            System.out.println("Division by null is not allowed");
            System.out.println(e.toString());
        }
        return solution;
    }

}
 

coco07

Bekanntes Mitglied
Hey javastudent25,

darf ich fragen, was eigentlich das Problem ist? Hast du den Code im ersten Post geändert?
Der Code ist nämlich völlig in Ordnung. Du musst keine eigene Klasse definieren, um diese Exception schmeißen oder abfangen zu können...

Solltest du den Code verändert haben, wäre das für alle später dazukommenden Leser etwas unglücklich zu verfolgen.

Grüße
Coco07!
 

javastudent25

Bekanntes Mitglied
ok, was ist jetzt falsch was ist jetzt richtig?
Ich habe immer neue Codes gepostet, keine geändert.

übrigens habe ich nun eine etwas andere Variante und diese Variante, wenn ich es umkehrt mache, sprich a in den Nenner setze, kommt infinity dabei raus. Der Typ ist jetzt aber double, aber das sollte ja nichts zur Sache tun oder..

das war bei

publicclass Arithmetic__exception1 nicht so

Java:
public class Arithmetic__exception2 {

    public static void main(String[] args) {
   
         
          divide(0);

    }

    public static double divide(int a){
        double solution=0;
        try
        {
           solution = 1.0/a;
           System.out.println(solution);
        }
        catch (ArithmeticException e)
        {
            System.out.println("Division by null is not allowed");
            System.out.println(e.toString());
        }
        return solution;
    }

}
 

coco07

Bekanntes Mitglied
Ehrlich gesagt ist das eine ziemlich knifflige Aufgabe, sogar für mich. Bei dem Datentyp "int" scheint es kein Problem zu sein, eine Division durch 0 zu catchen. Bei einem Wert vom Datentyp "double" scheint das Ganze etwas anders zu sein. Um mich jetzt in das Thema einzulesen fehlt mir einfach die Konzentration um diese Uhrzeit :/
Jedenfalls kannst du das Problem so lösen:
Java:
public static double divide(double a){
            double solution = 0;
            try
            {
               solution = 1.0/a;
               if(Double.isInfinite(solution)){
                   solution = 0;
                   throw new ArithmeticException();
               }
            }
            catch (ArithmeticException e)
            {
                System.out.println("Division by zero in not allowed");
            }
            return solution;
        }

Wenn dich das Thema interessiert und dir die Lösung nicht reicht(so geht es mir meistens), dann kannst du dich hier einlesen:
klick mich!

Schöne Nacht noch :)

Grüße
Coco07!
 

thecain

Top Contributor
ok, deine Variante versuche ich morgen.

Diese Variante funktioniert

Logisch funktioniert diese Variante, jetzt heisst deine Klasse aber auch nicht mehr ArithmeticException, das heisst du wirfst die "Standard-ArtithmeticException" von Java. Vorher wolltest du deine eigene Klasse als Exception werfen, deswegen auch meine Aussage das dies keinen Sinn macht.

Bei Double wird keine Exception geworfen, weil double NaN (bzw Infinty) darstellen kann, was int nicht kann => alles wird korrekt behandelt
 

InfectedBytes

Top Contributor
das Problem ist, das bei einer Integer Division durch 0 eine ArithmeticException geworfen wird. Da du aber deine Klasse selber auch wieder ArithmeticException genannt hast, gibt es ein Problem bei catch(ArithmeticException).
Aufgrund der Sichtbarkeit wird hier halt davon ausgegangen, dass du deine eigene Klasse meinst, was eben nicht geht, da sie nicht von Exception erbt. Außerdem hätte es eh zu einem anderen Problem geführt, da die "echte" Arithmetic Exception nicht gefangen wird.
 

javastudent25

Bekanntes Mitglied
Logisch funktioniert diese Variante, jetzt heisst deine Klasse aber auch nicht mehr ArithmeticException, das heisst du wirfst die "Standard-ArtithmeticException" von Java. Vorher wolltest du deine eigene Klasse als Exception werfen, deswegen auch meine Aussage das dies keinen Sinn macht.

Bei Double wird keine Exception geworfen, weil double NaN (bzw Infinty) darstellen kann, was int nicht kann => alles wird korrekt behandelt

du hast mir gerade 2 Fragen erspart.. :)
In diesem Fall wollte ich auch eine Standard-ArithmeticException machen.
Die muss ich ja nicht extra werfen lassen, wenn es Java ja sowieso tut.

das Problem ist, das bei einer Integer Division durch 0 eine ArithmeticException geworfen wird. Da du aber deine Klasse selber auch wieder ArithmeticException genannt hast, gibt es ein Problem bei catch(ArithmeticException).
Aufgrund der Sichtbarkeit wird hier halt davon ausgegangen, dass du deine eigene Klasse meinst, was eben nicht geht, da sie nicht von Exception erbt. Außerdem hätte es eh zu einem anderen Problem geführt, da die "echte" Arithmetic Exception nicht gefangen wird.

Danke auch für die Erklärung mit der Sichtbarkeit. Das hat mir auch 1 Frage erspart.

Meine 2 Varianten Standard Exceptions sehen nun folgend aus:


Java:
public class Arithmetic__exception1 {

    public static void main(String[] args) {

        divide(0);

    }

    public static int divide(int a) {
        int solution = 0;
        try {
            solution = 1 / a;
            System.out.println(solution);
        } catch (ArithmeticException e) {
            System.out.println("Division by null is not allowed");
            System.out.println(e.toString());
        }
        return solution;
    }

}
Java:
public class Arithmetic__exception2 {

    public static void main(String[] args) {

        try {
            int b = divide(0);
            System.out.println(b);

        } catch (ArithmeticException e) {
            System.out.println("Division by null is not allowed");
            System.out.println(e.toString());
        }
    }

    public static int divide(int a) throws ArithmeticException {

        int solution = 1 / a;
        return solution;
    }
}
 

javastudent25

Bekanntes Mitglied
Ich habe ein weiteres Problem und zwar habe ich hier gelesen, dass ja eine NullPointerException dann geworfen wird, wenn eine Methode an einem Objekt aufgerufen wird, welches gar nicht vorhanden ist.
Demnach müsste dies ja gehen, wenn ich sage, andrew.speaks();
Tut aber nicht.


Java:
public class Null_Pointer_Exception {

    public static void main(String[] args) {
       
        Person_NullPointer_Exception donaldTrump = new Person_NullPointer_Exception("Donald Trump");
       
        try {
           
             donaldTrump.speaks();
             andrew.speaks();

        } catch (NullPointerException e) {
            System.out.println("You ...: " + e.getMessage());
       
        }

    }

}
Java:
public class Person_NullPointer_Exception{
   
    private String name;
   
    public Person_NullPointer_Exception(String name){
        this.name = name;
    }
   
    public void speaks(){
        System.out.println(name + " says: I know I speak first before i think");
    }
   
}
 

InfectedBytes

Top Contributor
das kompiliert erst gar nicht, da andrew nicht deklariert wurde.
Die NullPointerException (NPE) wird geworfen, wenn die Variable null ist.
Java:
Person p = null;
p.test(); // NPE
 
K

kneitzel

Gast
Das sind ja nur ganz einfache Beispiele um zu erläutern, wann eine NPE vorkommt. Code selbst ist ja viel komplizierter. Person p ist dann das Ergbnis eines Funktionsaufrufs. Und dann wird nicht auf null geprüft.

Wobei es für diese ganze Thematik schon Lösungsansätze gibt. Bei den NullPointerExceptions wäre dies z.B. die Einführung von Verträgen (Contracts), die vorgeben, ob null zurückgegeben werden darf oder nicht. Durch die Konsequente Nutzung solcher erweiterter Verträge kann der Compiler schon sicher stellen, dass es zu keinen NPEs kommen kann. Aber das ist noch Zukunftsmusik aber iContract und so gehen in diese Richtung.

Konrad
 

JStein52

Top Contributor
Das ist ja auch ein relativ simples Beispiel. Da kanns leicht klingeln. Bei komplexeren Abläufen klingelt es manchmal nicht so direkt und dafuer gibts diese Exception.
 

javastudent25

Bekanntes Mitglied
ok, ich habe noch eine Frage zur ClassNotFoundException
Wie funktioniert diese?
wenn ich nun das Programm fertig habe, und die Klasse Person_.... entferne, geht das ja nicht so einfach.
Weil ich es dann ja überhaupt nicht kompiliert bekomme..
 

JStein52

Top Contributor
Es könnte sein dass zur Laufzeit eine Klasse nicht gefunden wird die in deiner Entwicklungsumgebung aber sehr wohl vorhanden ist
 

Bitfehler

Bekanntes Mitglied
Wenn während der Laufzeit eine Klasse nachgeladen wird.
Kann beispielsweise auftreten, wenn der JDBC-Treiber nicht geladen werden kann.
 
K

kneitzel

Gast
Also die ClassNotFound Exception kann auftreten, wenn Du z.B. Klassen beim kompilieren noch vorliegen hast aber bei der Ausführung diese nicht zur Verfügung stehen.

In Deinem Beispiel wäre das vergleichbar mit dem Löschen der Person.class Datei, die Du nach dem übersetzen bekommst. Aber in der Realität ist das oft ein Problem, dass eine Library nicht da ist.

Konrad
 

javastudent25

Bekanntes Mitglied
Ja das heisst aber, dass ich diese Exception eigentlich immer abfangen muss, weil das kann ja immer irgendwie sein, oder nicht?
Räumt mal einer irgendwelche Ordner auf und schiebt die Dateien hin und her, funktioniert das Ganze nicht mehr..
 

JStein52

Top Contributor
Musst du eigentlich nur abfangen wenn du sie selber behandeln willst. In der Regel ist bei dieser Exception aber kein sinnvoller Ablauf des Programmes möglich.
 

javastudent25

Bekanntes Mitglied
Ok, nach deiner Aussage, muss ich dann von den 8 versch. also 1, 3, 4, 5 abfangen..
Stimmt das?

1. Arithmetic
2. Class not found
3. IndexOutOfBound
4. InputMismatch
5. IOExceptiion
6. FileNotFound
7. NullPointer
8. IllegalArgument
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Ich weiss ja nicht ob man das so allgemein formulieren kann aber das sind jedenfalls heisse Kandidaten. Allgemein würde ich sagen du fängst jede Exception ab bei der du weisst wie du sie in deinem Programm sinnvoll behandelst so dass das Programm weiterarbeiten kann.
 
K

kneitzel

Gast
Ergänzen würde ich noch, dass man immer überlegen sollte, in wie weit eine Exception nicht vermieden werden kann. IndexOurOfBound ist ein Kandidat, den ich nicht abfangen sondern vorab überprüfen würde, so dass dies nicht erst auftreten kann.
 

coco07

Bekanntes Mitglied
Es gibt sogenannte CheckedExceptions und UncheckedExceptions in Java. CheckedExceptions sind Exceptions, welche behandelt werden MÜSSEN. Ein gutes Beispiel dafür ist der Fall einer Dateianlegung auf der Festplatte, wo es z.B. zu Berechtigungproblemen kommen kann oder eine Datei im Falle von lesendem Zugriff gar nicht vorhanden ist. CheckedExceptions MÜSSEN behandelt oder an eine höher liegende Instanz "weitergereicht" werden. Du erkennst sie entweder daran, dass du einen Compilerfehler bekommst, sobald du sie ignorierst oder anhand ihrer Vererbungshierarchie. An den Stellen, an denen CheckedExceptions geworfen werden, können Programmierer bei richtiger Verwendung nichts dafür, dass es zu einem Problem gekommen ist und müssen deshalb für den Fall vorsorgen, dass etwas schief geht.
Eine UncheckedException ist in 99% aller Fälle ein Programmierfehler und kann durchaus mit Erfahrung vermieden werden(wenn man nicht gerade um 2 Uhr nachts im Schlaf programmiert...). Eine UncheckedException muss und sollte nicht behandelt werden, nur um Problemen aus dem Weg zu gehen, welche man aufgrund mangelnder Kenntnisse nicht lösen kann(dafür ist das Forum da :)). Ein gutes Beispiel für eine UncheckedException ist zum Beispiel eine NPE, welche durchaus über eine "if-Abfrage" oder im Falle einer Typüberprüfung auch durch den "instanceof-Operator" vermieden werden kann. Eine UncheckedException erbt von RuntimeException(du kannst auch eigene definieren...)

Ich hoffe, ich konnte dir einen etwas tieferen Einblick gewähren...

Grüße
Coco07!
 

javastudent25

Bekanntes Mitglied
Ich habe gerade diesbezüglich etwas gebastelt, bekomme es aber vorerst um weitere Fragen zu stellen nicht zum Laufen..
Was mache ich falsch?

bei
public class Slipsize_too_small_Exception throws SlipSizeTooSmallException{
zeigt es mir den Fehler:

Multiple markers at this line
- Syntax error on token "class", delete this token
- Syntax error, insert "enum Identifier" to complete
EnumHeaderName
- Breakpoint:Slipsize_too_small_Exception
- Syntax error, insert "EnumBody" to complete
CompilationUnit
- Syntax error, insert "}" to complete Block

Java:
public class Slipsize_too_small_Exception throws SlipSizeTooSmallException{
   
   
    public void text (int slipSize){
       
        if (slipSize < 120 ){
            throw new SlipSizeTooSmallException();
            System.out.println("too small slipsize");
        }
        else{
            System.out.println("Successful, great Job");
        }   

    }

}



Java:
public class SlipSizeTooSmallException extends Exception {

    public SlipSizeTooSmallException(){
       
        super("Slipsize of your girlfriend is greater than size you typed in");
    }
   
}



Java:
public class Slipsize_too_small_Exception_Demo {

    public static void main(String[] args) {
       
        Slipsize_too_small_Exception exception = new Slipsize_too_small_Exception();
       
        exception.text(119);

    }

}

 

coco07

Bekanntes Mitglied
Kein Problem, wir sind da um zu helfen :)

Es ist eigentlich ganz einfach. Eine Klasse selbst kann keine Exception werfen, eine Methode schon. Schreibe die "throw-Klausel" hinter die Parameterliste deiner text-Methode.
Wenn diese Schreibweise nämlich funktioniert würde, könnte man ja 10 Methoden in einer Klasse definieren und alle dieser Methoden könnten eine Exception schmeißen. Der Aufrufer(in deinem Fall die main-Methode) darf dann jedes Mal einen try-catch Block um einen Methodenaufruf auf einer Instanz dieser Klasse schreiben, obwohl nur eine dieser 10 Methoden wirklich eine Exception schmeißen könnte.

Wenn du dieses änderst, wirst du bemerken, dass deine IDE beim Aufruf der text-Methode meckern wird, aber das lasse ich dich selbst lösen. Melde dich einfach, wenn du nicht weiterkommst ;)

Grüße
Coco07!
 

javastudent25

Bekanntes Mitglied
Kein Problem, wir sind da um zu helfen :)

Es ist eigentlich ganz einfach. Eine Klasse selbst kann keine Exception werfen, eine Methode schon. Schreibe die "throw-Klausel" hinter die Parameterliste deiner text-Methode.
Wenn diese Schreibweise nämlich funktioniert würde, könnte man ja 10 Methoden in einer Klasse definieren und alle dieser Methoden könnten eine Exception schmeißen. Der Aufrufer(in deinem Fall die main-Methode) darf dann jedes Mal einen try-catch Block um einen Methodenaufruf auf einer Instanz dieser Klasse schreiben, obwohl nur eine dieser 10 Methoden wirklich eine Exception schmeißen könnte.

Wenn du dieses änderst, wirst du bemerken, dass deine IDE beim Aufruf der text-Methode meckern wird, aber das lasse ich dich selbst lösen. Melde dich einfach, wenn du nicht weiterkommst ;)

Grüße
Coco07!

Es funktioniert jetzt.
Ich habe es jetzt gelöst, aber worauf du hinaus willst habe ich noch nicht ganz verstanden.
Warum tut das jetzt bei mir genau?


Java:
public class Slipsize_too_small_Exception{
   
   
    public void text (int slipSize) throws SlipSizeTooSmallException{
       
        if (slipSize < 120 ){
           
            System.out.println("too small slipsize");
            throw new SlipSizeTooSmallException();
           
        }
        else{
            System.out.println("Successful, great Job");
        }   

    }

}



Java:
public class SlipSizeTooSmallException extends Exception {

    public SlipSizeTooSmallException(){
       
        super("Slipsize of your girlfriend is greater than size you typed in");
    }
   
}



Java:
public class Slipsize_too_small_Exception_Demo {

    public static void main(String[] args) throws SlipSizeTooSmallException{
       
        Slipsize_too_small_Exception exception = new Slipsize_too_small_Exception();
       
        exception.text(119);

    }

}
 

coco07

Bekanntes Mitglied
Ist nicht ganz so wild, dass du nicht verstehst, worauf ich hinaus will. Hauptsache du weißt jetzt, dass die Klasse selbst keine Exception werfen kann.

Ich habe aber eben übersehen, dass du auch in der Main-Methode die Exception an die nächst höhere Instanz "weiterreichst". Da die main-Methode aber der Start des Programms ist, stürzt dein Programm ab, weil es nichts "überhalb" der main-Methode gibt, welches die Exception irgendwie behandeln könnte.
Nimm deshalb die "throw-Anweisung" aus der Methodendefinition deiner main-Methode heraus und behandle die Exception stattdessen im Rumpf, ansonsten kannst du es auch gleich bleiben lassen und hättest das gleiche Ergebnis.

Grüße
Coco07!
 

javastudent25

Bekanntes Mitglied
ok, das muss ich jetzt verstehen, verstehe es aber nicht so ganz.
ich habe das Ganze jetzt so gemacht..
Ich habe ja keine Throw-Anweisung in meiner main??
die ist doch in der text-Methode von der class Slipsize_too_small_Exception

main
Java:
public class Slipsize_too_small_Exception_Demo {

    public static void main(String[] args) throws SlipSizeTooSmallException{
       
        Slipsize_too_small_Exception exception = new Slipsize_too_small_Exception();
       
        exception.text(119);

    }

}



Java:
public class SlipSizeTooSmallException extends Exception {

    public SlipSizeTooSmallException(){
       
        super("Slipsize of your girlfriend is greater than size you typed in");
    }
   
}


Java:
public class Slipsize_too_small_Exception{
   
   
    public void text (int slipSize) throws SlipSizeTooSmallException{
       
        try{
        if (slipSize < 120 ){
            throw new SlipSizeTooSmallException();
        }else{
            System.out.println("Successful, great Job");
        }
        }
        catch(SlipSizeTooSmallException e)
        {
            System.out.println(e.toString() + ": too small slipsize");
        }
        }
    }
 

Bitfehler

Bekanntes Mitglied
Diese Zeile ist gemeint:
Code:
 public static void main(String[] args) throws SlipSizeTooSmallException{

Es wäre gut, wenn du hier auf das throws verzichtest und eine Ausnahme-Behandlung machen würdest. So wie coco07 es aufgezeigt hat.
 

javastudent25

Bekanntes Mitglied
Also anstatt in der text_methode?
Das würde ja heissen, ich behandle den selben Fehler 2 Mal, wenn ich die Ausnahmebehandlung in der Text_methode sein liesse und zusätzlich noch in der main es behandle
 
K

kneitzel

Gast
Also Deine Methode text wirft eine Exception. Das bedeutet, dass bei einem Aufruf (in deinem Fall die main Methode) entweder diese Exception abfangen (mittels try / catch) oder ebenfalls eine solche Exception werfen muss.

Was bei dir passiert ist:
- text wirft die Exception. Dadurch geht die AUsführung an main zurück.
- main fängt die Exception aber nicht, damit geht die Exception eine weitere Ebene nach oben.
- Eine weitere Ebene gibt es aber in Deiner Applikation nicht, d.h. die Runtime kümmert sich nun um die Exception.

Eine weitere Anmerkung von meiner Seite: Gewisse Standard-Situationen sollten dann auch die Standard-Exceptions nutzen. Wenn Du Argumente eines Aufrufes überprüfst, so bietet sich die IllegalArgumentException an. Diese muss auch nicht definiert werden.

Meine Meinung nacht ist es bei public Methoden immer wichtig, dass die Argumente vor der Nutzung geprüft werden. Und da ist es dann auch wichtig, dass die throws Klausel nicht an jeder Methode stehen muss :) (Womit wir dann beim Thema checked / unchecked Exceptions sind! Eigene Exceptions kannst Du natürlich auch entsprechend schreiben - einfach von RuntimeException ableiten - https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html)
 
K

kneitzel

Gast
Was du machst sind zwei Dinge:
a) In der Methode text prüfst Du die Argumente und wirfst ggf. eine Exception
b) In der main Methode reagierst Du auf die Exception. Das ist keine Prüfung mehr. Das ist dann eher ein: "Versuch eine bestimmte Sache - wenn dabei etwas schief geht, dann versuche ich einmal etwas anderes."

Typisches Beispiel ist hier z.B. ein Speicher-Vorgang. Das Speichern schlägt fehl (es tritt halt eine IO Exception auf) und die Applikation reagiert darauf, indem es z.B. einen "Speichern Unter" Dialog anzeigt.

Konrad
 

javastudent25

Bekanntes Mitglied
ok, meint ihr etwa so ist es richtig?

Java:
public class Slipsize_too_small_Exception_Demo {
    public static void main(String[] args) {
        Slipsize_too_small_Exception exception = new Slipsize_too_small_Exception();
        int a = 119;
        try {
            if (a < 120) {
                throw new IllegalArgumentException();
            } else {
                exception.text();
            }
        } catch (IllegalArgumentException e) {
            System.out.println(e);
        }
    }
}

Java:
public class IllegalArgumentException extends RuntimeException {
    public IllegalArgumentException(){      
        super("Slipsize of your girlfriend is greater than size you typed in");
    }  
}

Java:
public class Slipsize_too_small_Exception{
    public void text (){      
            System.out.println("Successful, great Job, chose right size ");
        }
}
 
Zuletzt bearbeitet von einem Moderator:
K

kneitzel

Gast
Nein.
a) Du erstellst keine eigene Klasse IllegalArgumentException. Diese gibt es bereits. Es stiftet nur Verwirrung noch einmal eine Klasse mit dem gleichen Namen zu erstellen, auch wenn diese in einem anderen Namespace ist.
b) Jetzt war es ja kein Argument mehr, dass Du überprüfst. Desweiteren ist alles in einer Methode. Das macht keinen Sinn mehr. Du wirfst doch keine Exception um diese sofort wieder zu fangen!

Sinn der Exceptions ist es, einen Programmablauf an einer Stelle zu unterbrechen um den Fehler dann Ebene für Ebene zurück zu geben, bis die Exception endlich behandelt wird.

Also wenn Du eine Funktion schreibst, die etwas machen soll, aber diese kann nun überraschend nicht das tun, was sie tun soll: Dann gibt dies die Funktion zurück. Das ist wichtig, denn Du hast oft unterschiedliche Ebenen in Deiner Applikation. Der Code, der eine Datei schreibt, kennt nur das speichern von Daten in die Datei. Der Code ist universell und hat daher keinerlei Möglichkeit, auf Fehler zu reagieren. Denn diese Funktionalität kann ja von allen möglichen Routinen aufgerufen worden sein. Z.B. eine JavaFX Applikation, die dann ein SaveAs Fenster anzeigen könnte oder es ist eine Server-Applikation, die nun irgendwie reagieren muss aber keine Möglichkeit für eine User-UI hat.

Hilft das etwas beim Verständnis?

Konrad
 

javastudent25

Bekanntes Mitglied
Ich dreh mich hier seit 3h nur im Kreis, was muss ich jetzt genau machen?

Ist das kompliziert..

Was brauch ich jetzt eine Methode die eine Exception wirft..?
 

javastudent25

Bekanntes Mitglied
ok, mal Schritt für Schritt
hier ist die Methode, die müsste so ja stimmen
sie wirft jetzt eine Exception und ich fange sie nicht gleich auf..

Java:
public class Slipsize_too_small_Exception{

    public void text(int a) throws IllegalArgumentException{

        if (a < 120) {
            throw new IllegalArgumentException();
        } else {
            System.out.println("well done");
        }
    }
}
 
K

kneitzel

Gast
Ja, schreib eine Methode mit Argumenten. Und definier irgend eine Regel, die erfüllt sein muss.

Also von mir aus schreibst Du eine Routine, die prüft, ob ein Mitarbeiter an einem bestimmten Tag bereits 10 jahre bei der Firma angestellt ist. Dazu nimmt die Methode zwei Daten: Einmal das Einstellungsdatum und zum anderen das Prüfdatum. Regeln, die du prüfen kannst, gibt es dann viele:
a) Prüfdatum vor Einstellungsdatum
b) Eines der beiden vor 1900
Und da kannst Du dann eine IllegalArgumentException werfen. Oder von mir aus irgend welche eigenen Exceptions.

Konrad
 
K

kneitzel

Gast
Ja richtig, damit hast Du eine Methode die ein Argument bekommt und Du hast eine Regel definiert. a muss größer oder gleich 120 sein. Du solltest aber noch beim Erstellen der Exception ein Nachricht mitgeben, also eher ein throw new IllegalArgumentException("a muss größer oder gleich 120 sein!");
Und ich würde da auf jeden Fall etwas Dokumentation generieren per JavaDoc, damit andere Entwickler beim nutzen der Methode diese Regel auch gleich sehen. Aber das sind andere Themen.

Konrad
 

javastudent25

Bekanntes Mitglied
Ja richtig, damit hast Du eine Methode die ein Argument bekommt und Du hast eine Regel definiert. a muss größer oder gleich 120 sein. Du solltest aber noch beim Erstellen der Exception ein Nachricht mitgeben, also eher ein throw new IllegalArgumentException("a muss größer oder gleich 120 sein!");
Und ich würde da auf jeden Fall etwas Dokumentation generieren per JavaDoc, damit andere Entwickler beim nutzen der Methode diese Regel auch gleich sehen. Aber das sind andere Themen.

Konrad

Die dürfte dir besser gefallen ;P
so passt die Methode wohl oder?

irgendwie kann ich einstellungsdatum < 1900 || pruefdatum < 1900
nicht zu (einstellungsdatum || pruefdatum) < 1900 machen

Java:
public class Slipsize_too_small_Exception{

    public void pruefen(int einstellungsdatum, int pruefdatum) throws IllegalArgumentException{
    
        if ((einstellungsdatum < pruefdatum) && (einstellungsdatum < 1900 || pruefdatum < 1900)) {
            System.out.println("Pruefdatum darf nicht kleiner sein als das Einstellungsdatum oder eines der beiden muss groesser 1900 sein");
            throw new IllegalArgumentException();
        } else {
            System.out.println("well done");
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

javastudent25

Bekanntes Mitglied
so und

wenn das nicht stimmt, dann fress ich einen Besen :p
das ist glaub gut so, bis auf die Benennung der Klassen oder?
Java:
public class Slipsize_too_small_Exception_Demo {

    public static void main(String[] args) {

        Slipsize_too_small_Exception exception = new Slipsize_too_small_Exception();

        int einstellungdatum = 1899;
        int pruefungsdatum = 2012;
        try {
            exception.pruefen(einstellungdatum,pruefungsdatum);
            }
        catch (IllegalArgumentException e)
        {
            System.out.println(e);
        }
    }
}
Java:
public class Slipsize_too_small_Exception{

    public void pruefen(int einstellungsdatum, int pruefdatum) throws IllegalArgumentException{
  
        if ((einstellungsdatum < pruefdatum) && (einstellungsdatum < 1900 || pruefdatum < 1900)) {
            System.out.println("Pruefdatum darf nicht kleiner sein als das Einstellungsdatum oder eines der beiden muss groesser 1900 sein");
            throw new IllegalArgumentException();
        } else {
            System.out.println("well done");
        }
    }
}
 
Zuletzt bearbeitet:

thecain

Top Contributor
Was noch Sinn machen würde, wäre den Message Parameter der Exception abzufüllen. Dann steht auch etwas aussagekräftiges im StackTrace
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Test auf Exceptions schreiben Java Basics - Anfänger-Themen 11
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
C Exceptions identifizieren Java Basics - Anfänger-Themen 5
A Exceptions mit objektreferenzen Java Basics - Anfänger-Themen 4
A Exceptions und methods Java Basics - Anfänger-Themen 2
A Cannot find symbol bei exceptions Java Basics - Anfänger-Themen 2
A Exceptions und Packages Java Basics - Anfänger-Themen 6
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
X Exceptions Benutzereingaben Java Basics - Anfänger-Themen 4
F Exceptions in Interfaces Java Basics - Anfänger-Themen 4
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
L Exceptions und Konten Java Basics - Anfänger-Themen 21
D Frage zu Exceptions Java Basics - Anfänger-Themen 8
I Wie programmiert man Exceptions? Java Basics - Anfänger-Themen 4
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
C Erste Schritte Exceptions nicht verstanden Java Basics - Anfänger-Themen 2
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
T Exceptions - ausgeführte Zeilen Java Basics - Anfänger-Themen 4
C Exceptions Java Basics - Anfänger-Themen 8
C Exceptions Java Basics - Anfänger-Themen 6
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
F Exceptions Java Basics - Anfänger-Themen 6
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
M "Exceptions abfragen" Java Basics - Anfänger-Themen 6
Farbenfroh Exceptions Anfänger - Finde Fehler nicht Java Basics - Anfänger-Themen 7
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
N Compiler-Fehler Drei Exceptions in GUIHack für Dreiecke auf MoveButtons Java Basics - Anfänger-Themen 36
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
S Exceptions Java Basics - Anfänger-Themen 7
M Vererbung Problem Vererbung/Exceptions Java Basics - Anfänger-Themen 9
S Verschachtelte Exceptions - Übersicht verbessern Java Basics - Anfänger-Themen 2
J Eclipse Exceptions Java Basics - Anfänger-Themen 2
K Schleifen und Exceptions Java Basics - Anfänger-Themen 8
K Exceptions auslagern Java Basics - Anfänger-Themen 15
R NullPointer Exceptions Java Basics - Anfänger-Themen 3
F Erste Schritte Übung zu Exceptions Java Basics - Anfänger-Themen 24
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Int Exceptions Java Basics - Anfänger-Themen 12
M Exceptions per throws oder try Java Basics - Anfänger-Themen 4
M Compiler-Fehler Queue als ArrayList mit Exceptions Java Basics - Anfänger-Themen 3
T Exceptions in einer Klasse Java Basics - Anfänger-Themen 3
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
H Methoden Überflüssige Exceptions Java Basics - Anfänger-Themen 20
C Exceptions Java Basics - Anfänger-Themen 14
1 While Schleife Exceptions Java Basics - Anfänger-Themen 6
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
D Frage zu Exceptions Java Basics - Anfänger-Themen 12
M Compiler-Fehler Exceptions lieber throwen oder direkt catchen? Java Basics - Anfänger-Themen 8
T Exceptions Java Basics - Anfänger-Themen 19
B Wie finde ich Exceptions? Java Basics - Anfänger-Themen 19
Dit_ Input/Output Alle Exceptions protokollieren Java Basics - Anfänger-Themen 9
T Exceptions Java Basics - Anfänger-Themen 12
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
F Exceptions werfen oder catchen?? Java Basics - Anfänger-Themen 14
D Exceptions - Ausnahmebehandlung Java Basics - Anfänger-Themen 19
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
J Paar Fragen zu Exceptions Java Basics - Anfänger-Themen 16
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
C Exceptions beim Beenden Java Basics - Anfänger-Themen 2
C TimerTask und Exceptions Java Basics - Anfänger-Themen 5
E Klasse öffnen, mehrere Exceptions Java Basics - Anfänger-Themen 9
C Exceptions Java Basics - Anfänger-Themen 7
G 2 Exceptions in einer Methode Java Basics - Anfänger-Themen 3
firefexx Exceptions werfen Java Basics - Anfänger-Themen 5
0 Exceptions mehrfach fangbar? Java Basics - Anfänger-Themen 4
O Exceptions Java Basics - Anfänger-Themen 3
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
H Diverse Exceptions - Troubleshooting Java Basics - Anfänger-Themen 3
J exceptions Java Basics - Anfänger-Themen 8
sc0p InterruptedExceptions und Exceptions - in Einem! Java Basics - Anfänger-Themen 5
M Frage zu Exceptions Java Basics - Anfänger-Themen 19
M Fragen zu Exceptions Java Basics - Anfänger-Themen 3
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
D Exceptions werfen + beenden Java Basics - Anfänger-Themen 12
M Exceptions aus interface-Methoden Java Basics - Anfänger-Themen 2
S File.renameTo und Exceptions / Fehlermeldung Java Basics - Anfänger-Themen 2
B Exceptions in Liste sammeln? Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
O "restliche" Exceptions fangen Java Basics - Anfänger-Themen 8
H [Stil] Exceptions in der Klasse behandeln oder throwen? Java Basics - Anfänger-Themen 62
T Problem beim Werfen und Fangen von Exceptions Java Basics - Anfänger-Themen 2
V Aktivitätsdiagramm / Exceptions Java Basics - Anfänger-Themen 5
V Exceptions Java Basics - Anfänger-Themen 6
K Frage zu Exceptions -> Logging Java Basics - Anfänger-Themen 6
M Eigene Fehlermeldung bei Exceptions? Java Basics - Anfänger-Themen 12
R JDom Exceptions Java Basics - Anfänger-Themen 4
R Datei einlesen mit Exceptions Java Basics - Anfänger-Themen 2
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
C Reflection Exceptions behandeln Java Basics - Anfänger-Themen 6
G Exceptions - spiegeln wir da nicht einen Spiegel im Spiegel? Java Basics - Anfänger-Themen 10
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
U Frage zu Exceptions Java Basics - Anfänger-Themen 5
mwildam Philosophiefrage zu Exceptions und Rückgabewerten Java Basics - Anfänger-Themen 6
D Static, final Objekte mit Exceptions im Konstruktor Java Basics - Anfänger-Themen 2
G Exceptions Java Basics - Anfänger-Themen 4
G ServerSocket: Exceptions und Timeout Probleme Java Basics - Anfänger-Themen 10
M Exceptions bei Textfeldern abfangen Java Basics - Anfänger-Themen 2
P Problem mit exceptions Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben