Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Java: "Exception must be caught or declared to be thrown"
Druckversion
Druckversion
Autor
Universität/Hochschule J Java: "Exception must be caught or declared to be thrown"
curious_mind
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 10.11.2012
Mitteilungen: 451
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2021-04-18 11:05


Hallo,
wo ist hier das Problem?
Java
package KE2;
 
public class Wochentag {
    private int tag;
 
    public Wochentag() {
        tag = 0;
    }
 
    public void setTag(int i) throws KeinTagException {
        if ((0 <= i)&&(i<=6))
            tag = i;
        else
            throw new KeinTagException();
    }
 
    public int getTag() {
        return tag;
    }
 
    public void naechsterTag(){
        tag = (tag+1) % 7;
    }
 
    public void vorhergehenderTag(){
        if (tag == 0)
            tag = 6;
        else tag--;
    }
 
    public String toString(){
        switch(tag) {
            case 0: return "Montag";
            case 1: return "Dienstag";
            case 2: return "Mittwoch";
            case 3: return "Donnerstag";
            case 4: return "Freitag";
            case 5: return "Samstag";
            case 6: return "Sonntag";
            default: return "ERROR";
        } // end switch
    } // end toString
 
} // end Wochentag
 
class KeinTagException extends Exception{}
 
class Main{
    public static void main(String[] args){
        System.out.println("Starte Programm...");
        Wochentag w = new Wochentag();
        w.setTag(2);
    }
}
 

Fehlermeldung lautet:
...\src\KE2\Wochentag.java:52:17
java: unreported exception KE2.KeinTagException; must be caught or declared to be thrown



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2117
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2021-04-18 11:19


2021-04-18 11:05 - curious_mind im Themenstart schreibt:
wo ist hier das Problem?

Die Meldung sagt doch schon alles:

2021-04-18 11:05 - curious_mind im Themenstart schreibt:
...\src\KE2\Wochentag.java:52:17
java: unreported exception KE2.KeinTagException; must be caught or declared to be thrown

In Zeile 52 verwendest du setTag und diese Methode kann eine KeinTagException werfen, um die du dich kümmern musst.

Du musst sie also entweder durch ein try/catch fangen oder du musst deklarieren, dass deine main-Methode diese Exception werfen kann.

--zippy



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
curious_mind
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 10.11.2012
Mitteilungen: 451
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2021-04-18 15:25


Ich hab doch schon in der setTag Methode die if-else, wo sie ggf. geschmissen wird. Verstehe ich nicht.

Edit: Ich hab's.
Java
class Main{
    public static void main(String[] args){
        System.out.println("Starte Programm...");
        Wochentag w = new Wochentag();
        try {
            w.setTag(2);
        }
        catch (KeinTagException e) {
            System.out.println("Error");
        }
    }

Dann hätte es aber eigentlich mehr Sinn gemacht, gleich in der setTag Methode dieses try-catch Gefüge, statt der if-else zu nutzen, oder?

Kurze Frage noch zu den Klassen:
Ist wichtig, wo die "class [Ausnahme] extends Exception" hier steht, also ob in oder außerhalb von class Wochentag?




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2117
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2021-04-18 15:29


2021-04-18 15:25 - curious_mind in Beitrag No. 2 schreibt:
Verstehe ich nicht.

Was verstehst du nicht?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2117
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2021-04-18 15:54


2021-04-18 15:25 - curious_mind in Beitrag No. 2 schreibt:
Dann hätte es aber eigentlich mehr Sinn gemacht, gleich in der setTag Methode dieses try-catch Gefüge, statt der if-else zu nutzen, oder?

Ich verstehe überhaupt nicht, worin der Sinn einer deklarierten Exception in setTag besteht. Hätte nicht eine RuntimeException wie die IllegalArgumentExcception genügt?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
curious_mind
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 10.11.2012
Mitteilungen: 451
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, vom Themenstarter, eingetragen 2021-04-18 18:41


Das Code-Beispiel ist zum Lernen und war so in der Literatur vorgegeben. Ich habe nur die class Main selbst geschrieben, weil ich es mal testen wollte.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
curious_mind
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 10.11.2012
Mitteilungen: 451
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2021-04-19 10:21


Kurze Frage noch zu den Klassen:
Ist wichtig, wo die "class [Ausnahme] extends Exception" hier steht, also ob in oder außerhalb von class Wochentag?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2117
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2021-04-19 10:35


2021-04-19 10:21 - curious_mind in Beitrag No. 6 schreibt:
Ist wichtig, wo die "class [Ausnahme] extends Exception" hier steht, also ob in oder außerhalb von class Wochentag?

Du könntest die Exception auch zu einer statischen Klasse innerhalb von Wochentag machen.

In der main-Methode würdest du dich dann auf diese Exception über Wochentag.KeinTagException beziehen.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bilbo
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.01.2005
Mitteilungen: 2002
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2021-04-19 10:35


Hallo curious_mind,

wenn die KeinTagException innerhalb der Klasse Wochentag definiert würde, könntest Du jedenfalls beim Abfangen der Exception in der Klasse Main nicht einfach so darauf zugreifen, wie Du es jetzt tust. Es müsste dann heißen:
Java
try{
    w.setTag(2)
}
catch (Wochentag.KeinTagException e) {
    System.out.println("Error");
}

Davon abgesehen, geht in diesem Fall beides.

Dann hätte es aber eigentlich mehr Sinn gemacht, gleich in der setTag Methode dieses try-catch Gefüge, statt der if-else zu nutzen, oder?

Nein, dort kannst Du noch kein "try-catch" verwenden, weil an dieser Stelle ja die Exception erst erzeugt wird. Dagegen dient "try-catch" dazu, eine Exception, die irgendwo anders (d.h. in einer aufgerufenen Funktion) erzeugt wurde, abzufangen. Das sind zwei unterschiedliche Dinge.

Viele Grüße
Thorsten



[Die Antwort wurde nach Beitrag No.6 begonnen.]


-----------------
Heilmagier der Drachengilde
Wohlordner des Universums
Rechner des Unberechenbaren
Navigator Irrlichts im Ozean der Rätsel



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
curious_mind
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 10.11.2012
Mitteilungen: 451
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2021-04-19 11:04


Aaaaaaaaah! Ok, danke sehr!

Dann noch eine kurze Rückfrage an Euch:

Ich habe jetzt in der Main class noch etwas herumgespielt und festgestellt, dass im Code
Java
public static void main(String[] args){
        System.out.println("Starte Programm...");
        Wochentag m = new Wochentag();
        try {
            m.setTag(0);
            System.out.println(m.toString());
            m.vorhergehenderTag();
            System.out.println("Tag davor...");
            System.out.println(m.toString()); <---
            System.out.println(m);            <---
        }
        catch (KeinTagException e) {
            System.out.println("Error");
        }

...beide markierten (<---) Zeilen dasselbe liefern.

Das wird irgendeine implizite Umwandlung sein, oder? Ansonsten frage ich mich nämlich, woher er beim "Objekt m" (zweite markierte Zeile) weiß, was da auszudrucken ist.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bilbo
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.01.2005
Mitteilungen: 2002
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, eingetragen 2021-04-19 11:29


Richtig, die Funktion println(Object obj) ruft intern bereits obj.toString() auf, um die Darstellung für die Ausgabe zu ermitteln.


-----------------
Heilmagier der Drachengilde
Wohlordner des Universums
Rechner des Unberechenbaren
Navigator Irrlichts im Ozean der Rätsel



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
curious_mind
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 10.11.2012
Mitteilungen: 451
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, vom Themenstarter, eingetragen 2021-04-19 12:57


ok, danke :)



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
curious_mind hat die Antworten auf ihre/seine Frage gesehen.
curious_mind hat selbst das Ok-Häkchen gesetzt.
Neues Thema [Neues Thema]  Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]