[Erledigt] eigene Exception

Hi,

ich habe versucht eigene Exception zu programmieren, nur funrkioniert das irgendwie nicht. Was mache ich falsch?

package self;

public class TesteSieben {

	public static void main(String[] args) throws SevenException{
		int meineZahl = 7;
		
		if(meineZahl == 7){
			throw new SevenException();
		}
		else
		{
			System.out.println("Diese Zahl mag ich!");
		}
	}

}
package self;

public class SevenException extends ArithmeticException{
		
	public SevenException() {
		getMessege();
	}
	
	String getMessege(){
		return "Ich mag keine sieben! ERROR!";
	}

}

wieso was soll da passieren ist doch richtig so du machst es nur falsch dass du sie schon wieder weiterleitest

Ich wollte, dass wenn ich die auslöse, dass in der Fehlermeldung der String aus der getMessege()-Methode steht. Funktioniert aber nicht.

Ich kriege dies als Fehlermeldung:

Exception in thread "main" self.SevenException
	at self.TesteSieben.main(TesteSieben.java:9)

Richtig muss das so aussehn

package self;
public class TesteSieben {

	public static void main(String[] args) {
         try
         {
		int meineZahl = 7;
		
		if(meineZahl == 7){
			throw new SevenException();
		}
		else
		{
			System.out.println("Diese Zahl mag ich!");
		}
           }
           catch(SevenException e)
           {
              System.out.println(e.getMessage());
           }
	}

}

Auf der DVD hat man so gemacht:

package self;

public class SevenException extends ArithmeticException{
		
	
	private double zahl;
	
	public SevenException(double zahl) {
		this.zahl = zahl;
	}
	
	public String getMessage(){
		return "Ich mag keine sieben! ERROR!";
	}

}
package self;

public class TesteSieben {

	public static void main(String[] args) throws SevenException{
		int meineZahl = 7;
		
		if(meineZahl == 7){
			throw new SevenException(meineZahl);
		}
		else
		{
			System.out.println("Diese Zahl mag ich!");
		}
	}

}

Fehlermeldung:

Exception in thread "main" self.SevenException: Ich mag keine sieben! ERROR!
	at self.TesteSieben.main(TesteSieben.java:9)

Warum funktioniert das und warum funktioniert meine Exception nicht? Hier hat man ohne try-catch gemacht. Ich habe bisschen anders gemacht, aber ich sehe keinen Fehler in meinem Versuch…hmmm…

also wenn das genauso gemacht wurde kann ichs dir nicht sagen
ansonsten würd ich darauf tippen das sie die toString() überschrieben haben
aber so mit dem aus der main weiterleiten ist eh scheiße :wink:

package self;

public class SevenException extends ArithmeticException{
		
	public String getMessage(){
		return "Ich mag keine sieben! ERROR!";
	}

}


package self;

public class TesteSieben {

	public static void main(String[] args) throws SevenException{
		int meineZahl = 7;
		
		if(meineZahl == 7){
			throw new SevenException();
		}
		else
		{
			System.out.println("Diese Zahl mag ich!");
		}
	}

}

Ich habe nochmal versucht und jetzt hat es geklappt. Warum die auf DVD einen Konstruktor gemacht haben, verstehe ich nicht. Ist doch an der Stelle überflüssung. Die Zahlen werden ja nicht in der Exception sondern in dem Programm überprüft. Die getMessage()-Methode muss public sein. Als es funktioniert hat und ich public entfernen wollte, hat er sofort gemekert. Warum er beim ersten mal das nicht gemacht hat, hmm? Naja egal. Jetzt geht es und sogar viel kurzer als auf der DVD.

ach jetzt seh ichs du hast nen Schreibfehler drin gehabt du hast Messege geschrieben nicht Message
deswegen hat er auch nicht gemeckert weil man kann den Modier nicht “enger” machen als in der Oberklasse
d.h. du kannst aus private -> default machen (kein Modifier) oder aus protected --> public
aber nicht umgekehrt public -> private

Ich verstehe nicht ganz. Ich habe in meinem 1 Beispiel zwar die Methode auf Englisch falsch geschrieben, aber diese Methode habe ich ja nie in der MainKlasse aufgerufen, sondern die ganze Klasse(SevenException) und da ist es egal wie die Methode heisst, oder nicht? Irgendwie verstehe ich das noch nicht:confused:

ja aber Java ruft diese auf, es wird immer erst getMessage und dann printStacktrace aufgerufen und du hast ja die getMessage nicht überschrieben

:confused: getMessage oder getMessege? Ich rede vom 1 Bsp. Da gibt es doch keine getMessage, oder?

Mein erster und letzer Bsp unterscheiden sich nur, dass bei einempublic steht und bei anderem nicht, aber warum hat er dann die methode ohne public nicht unterstrichen(eclipse)? Oder bin ich vieleicht blind und sehe irgendwas nicht lol:stumm:

Wieso soll er das unterstreichen?
Das ist für Java nur eine neue Methode die du geschrieben hast, und die getMessage Methode gibt es aber halt in einer der Superklassen.

ACHSO?! Das ist keine erfundene Methode? LOL. Also habe ich damit die Methode der Superklasse überschrieben? Und weil ich im 1 Bsp sie anders benannt habe, hat das nicht funktioniert, weil die Überschreibung nicht statgefunden hat?

genau